• Как работает этот код?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Чтобы понять, что происходит, нужно просто посмотреть. Например, так:
    Пример
    var q = (function(x,foo = () => x) {
    	console.log('a)',x,y,foo()); //2 undefined 2
    	var x;
    	console.log('b)',x,y,foo()); //2 undefined 2
    	var y = x;
    	console.log('c)',x,y,foo()); //2 2 2
    	x =3;
    	console.log('d)',x,y,foo()); //3 2 2
    	return [x,y,foo()];
    })(2)
    console.log(q) // [3,2,2]
    Более подробный пример
    var q = (console.log('init q',typeof x), //init q undefined
    	function(x,foo = (console.log('init foo',x),() => x)) { //init foo 2
    		console.log('a)',x,y,foo()); //2 undefined 2
    		var x;
    		console.log('b)',x,y,foo()); //2 undefined 2
    		var y = x;
    		console.log('c)',x,y,foo()); //2 2 2
    		x =3;
    		console.log('d)',x,y,foo()); //3 2 2
    		return [x,y,foo()];
    	}
    )(2)
    console.log(q) // [3,2,2]

    В общем, там на момент инициализации функции foo видна область видимости анонимной функции. Но этих локальных областей видимости у анонимной функции как бы две на самом деле. Первая содержит параметры функции, а вторая - уже локальные переменные функции. И вот эта var x сидит во второй и перекрывает первую область видимости. То есть foo не видит var x, а видит только тот x, который в параметрах, потому что сама foo тоже сидит в первой области видимости. Надеюсь, доступно.
    Ответ написан
    Комментировать
  • Как связать добавление и удаленные данных с бэка при клике на checkbox?

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

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

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Можно попробовать исправить поломанный JSON.
    Примерно так, но это не покрывает 100% случаев из вашего вопроса
    <?php
    $str = '{"name": "my "name"", "value": "123456789"}';
    
    function fixJSON($str) {
        $len = strlen($str);
        $result = '';
        $space = '';
        $mode = 0;
        for($i=0;$i<$len;$i++){
            $c = $str[$i];
            switch ($mode) {
                case 0: //вне строки
                    if ($c == '"') $mode = 1;
                    $result .= $c;
                    break;
                case 1: //внутри строки
                    if ($c == '"') {
                        $mode = 3;
                        $space = $c;
                        break;
                    }
                    if ($c == '\\') $mode = 2;
                    $result .= $c;
                    break;
                case 2: //сразу после слеша (игнорим один любой символ)
                    $mode = 1;
                    $result .= $c;
                    break;
                case 3: //была кавычка внутри строки
                    if ($c == ' ' || $c == '\n' || $c == '\t' || $c == '\r')
                        $space .= $c;
                    elseif ($c == ',' || $c == '}' || $c == ']' || $c == ':') {
                        //вероятно был конец строки (шанс 99%)
                        $mode = 0;
                        $result .= $space.$c;
                    } else {
                        //мы остались внутри строки на 100%. Экранируем
                        $mode = 1;
                        $result .= '\\'.$space;
                        $i--; //уходим назад, т.к. вдруг это снова кавычка
                    }
                    break;
            }
        }
        return $result;
    }
    
    echo(fixJSON($str)); //{"name": "my \"name\"", "value": "123456789"}
    ?>

    Но лучше исправить то место, которое приводит к поломке JSON, чтобы оттуда к вам сразу нормальные строки приходили, а не костыли изобретать.

    P.S.
    Более совершенный и более упоротый вариант
    <?php
    $str = '{"say": ""my name", hi", "value": "123456789"}';
    
    function fixJSON($str) {
        $len = strlen($str);
        $result = '';
        $space = '';
        $mode = 0;
        for($i=0;$i<$len;$i++){
            $c = $str[$i];
            switch ($mode) {
                case 0: //вне строки
                    if ($c == '"') $mode = 1;
                    $result .= $c;
                    break;
                case 1: //внутри строки
                    if ($c == '"') {
                        $mode = 3;
                        $space = $c;
                        break;
                    }
                    if ($c == '\\') $mode = 2;
                    $result .= $c;
                    break;
                case 2: //сразу после слеша (игнорим один любой символ)
                    $mode = 1;
                    $result .= $c;
                    break;
                case 3: //была кавычка внутри строки
                    if ($c == ' ' || $c == '\n' || $c == '\t' || $c == '\r')
                        $space .= $c;
                    elseif ($c == '}' || $c == ']') {
                        //вероятно был конец строки (шанс 99%)
                        $mode = 4;
                        $space .= $c;
                    }
                    elseif ($c == ',' || $c == ':') {
                        //вероятно был конец строки (шанс 90%)
                        $mode = 5;
                        $space .= $c;
                    } else {
                        //мы остались внутри строки на 100%. Экранируем
                        $mode = 1;
                        $result .= '\\'.$space;
                        $i--; //уходим назад, т.к. вдруг это снова кавычка
                    }
                    break;
                case 4: //после спец символа
                    if ($c == ' ' || $c == '\n' || $c == '\t' || $c == '\r')
                        $space .= $c;
                    elseif ($c == ',') {
                        //был конец строки с шансом 99.99%
                        $mode = 0;
                        $result .= $space.$c;
                    } else {
                        //внтури строки на 100%
                        $mode = 1;
                        $result .= '\\'.$space;
                        $i--;
                    }
                    break;
                case 5: //после запятой
                    if ($c == ' ' || $c == '\n' || $c == '\t' || $c == '\r')
                        $space .= $c;
                    elseif (preg_match('/[0-9"-]+/', $c)) {
                        //был конец строки с шансом 99.9%
                        $mode = 0;
                        $result .= $space;
                        $i--;
                    } else {
                        //внтури строки на 100%
                        $mode = 1;
                        $result .= '\\'.$space;
                        $i--;
                    }
                    break;
            }
        }
        if ($mode>2) $result .= $space;
        return $result;
    }
    
    echo(fixJSON($str)); //{"say": "\"my name\", hi", "value": "123456789"}
    ?>
    Но всегда можно в строку засунуть другой JSON и никакой конечный фиксер не справится с такой глубиной.
    Ответ написан
    Комментировать
  • Как обойти CORS со стороны клиента?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    А при чем здесь VLC? Это отдельное приложение. Там может вообще не быть (скорее всего) проверки CORS, потому что это актуально только в браузере.

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

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Чтобы показать оповещения в браузере средствами JavaScript, достаточно загуглить два слова: javascript и notification.
    Попадёте на документацию: https://developer.mozilla.org/en-US/docs/Web/API/n...

    Далее в самом yii нужно разобраться с календарем. Информация должна как-то попадать на страницу, либо во время загрузки страницы, либо через ajax. Это уже полноценная задача.
    Ответ написан
    Комментировать
  • Попытка взлома аккаунта REG.RU - стоить ли бить тревогу?

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

    Конечно, это не ваш случай. Просто в тему вспомнилось.

    А по теме вопроса ответ: внимательно читайте и не ленитесь думать перед какими-либо действиями. Спешить никогда не нужно, а тем более паниковать или бить тревогу. Аккуратно наведите мышь на ссылку и убедитесь, что адрес там такой же, как у вас на скриншоте. Если ссылка ведёт именно на reg.ru, то я не вижу повода для беспокойства. В крайнем случае можете проверить ip отправителя и путь следования письма (т.к. обратный адрес не показатель). Ну и для 99.99% надежности лучше вообще никогда не переходить по ссылкам из писем, если вы эти письма не инициировали ближайшие 5 минут на официальном сайте, типа "я забыл пароль, пришлите мне новый".
    Ответ написан
    Комментировать
  • Что это за письмо? Не фишинг ли?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Это явно развод.
    А на что именно - не понятно. На то и расчёт.

    Скорее всего, вам предлагается сделать какое-то действие, которое требует подтверждения. У действия этого есть ссылка. Вот и всё. Возможно, это что-то типа 0-day. Например, example.com/givemoney.php?to=oksana.7vasilieva, далее редирект на подтверждение. В общем, это надо смотреть на ссылку и куда она ведёт (с отключённым автоматическим перенаправлением). Если лень, то просто в спам отправьте письмо.
    Ответ написан
    1 комментарий
  • Кто в курсе. Есть ли аналоги Баннербро?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Конечно, есть.
    Это Google AdSense и Яндекс.Директ
    Ответ написан
  • Как скрыть iframe после отправки формы?

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

    Поэтому iframe должен каким-то образом передать информацию об авторизации основному окну. Сделать это можно, например, через postMessage. Или любыми другими путями, которые вам покажутся удобными.

    Но если iframe не хочет делиться информацией, то её нельзя узнать. Разве что через браузерное расширение, но это уже придётся прибегать к помощи пользователя, а в этом случае можно и просто сделать кнопку "Скрыть iframe" для пользователя, которую он сможет нажать по желанию.
    Ответ написан
    Комментировать
  • С чем связана ошибка в Promise?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Вы не понимаете, как работают промисы и JS. Это самая главная ошибка.

    Попробую чуть-чуть объяснить.
    fn(a,b,c).then(fn(k,m,n))
    Вот так вы пишете. Что здесь происходит.
    fn срабатывает и сразу же возвращает объект типа промис, в котором вы вызываете метод then. Этот метод принимает две функции - для успеха и для фейла. В качестве функции успеха вы указываете выражение fn(k,m,n). Окей, далее JS вычисляет это выражение, то есть буквально выполняет эту функцию и в качестве результата получает новый промис, который используется в качестве callback функции успеха для первого промиса.

    Внимательно перечитайте документацию.
    https://learn.javascript.ru/promise

    Исправлением ошибки будет что-то вроде этого:
    animation(1, 500, log)
        .then(e=>animation(2, 1000, log))
        .then(e=>animation(3, 2000, log))
        .then(e=>animation(4, "500", log));
    Ответ написан
    Комментировать
  • Передать модальное окно по ссылке?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Можно через #анкор
    JS код анализирует текущий URL и создаёт модальное окно, если его нет.

    А в общем случае, если нужно по ссылке, то лучше не делать модальное окно, имхо.
    Ответ написан
  • Как в массиве с разными ключами вывести данные на страницу?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    $('button').click(function() {
        
        let button = $(this).next();
      
        let arr = {
           'nameOneItem' : 'Name one',
           'nameTwoItem' : 'Name two'
        };
      
        let out = '';   
      
        for (let i in arr) {
           out += '<span>' + arr[i] + '</span>';
        }
      
        button.append(out);
    });
    Ответ написан
    4 комментария
  • Зеркала в других зонах?

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

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

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Сомневаюсь, что это не вирус.

    Обычно у вируса есть цель. И обычно эта цель сопровождается тем, что вирус не даёт себя обнаружить просто так.

    Скорее всего, проблема в каком-то системном софте, системном реестре, железе, правах пользователя (одно из).
    Ответ написан
  • Как добавить знаки к выборке регулярного выражения?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    document.querySelector('#bet').oninput = function(e){
        var s = e.target.value;
        s = s.replace(/([^0-9.,]|^[.,]*|[.,]*$)/g,'').replace(/,/g,'.');
        var parts = s.split('.');
        e.target.value = parts.slice(0,-1).join('') + '.' + parts.slice(-1);
    }
    Ответ написан
    2 комментария
  • Как сравнить только часть символов строки?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    <?php
    $re = '/\(test(.*?)\)/m';
    $str = '(testOne)';
    $str2 = "fff";
    
    preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
    
    if (count($matches) > 0) {
        $str1 = $matches[0][1];
        echo ( $str1 == $str2 ? 'одинаковые' : 'разные' );
    }
    ?>
    Ответ написан
    Комментировать
  • Можно ли полностью убрать курсор из iframe?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    iframe сам решает, какой курсор отображать.

    Попробуйте натянуть прозрачный div поверх iframe. Возможно, прокатит. А может и нет.
    spoiler
    Конечно же, если клики в iframe нужны, то нужно использовать
    pointer-events: none
    Ответ написан
    Комментировать
  • Как вытягивать информацию из мобильной игры?

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

    Вообще вся самая вкусная статистика - платная. Выбирайте: App Annie, Superdata, Newzoo, Datamagic, SensorTower, AppData и т.д.
    Ответ написан
  • С чего начать изучать game dev?

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

    Как то ни обычно звучит, но советую поиграть в симулятор игровой студии. Я знаю, как минимум, две игры в Стиме и одну настолку. Это даст самое базовое представление о том, как всё не просто. Ну а дальше можно смотреть на конкретные термины, которые там встречаются, и гуглить их.

    Также в Москве есть курсы при ВШБИ. Это единственный вариант в России официального высшего образования в области геймдева. Ещё можешь поехать учиться в другие страны, там тоже есть варианты вышки, хотя этот вариант сложнее.
    Ответ написан
    Комментировать
  • Что прописать нужно чтобы файл html автоматически чистилcя в кэше браузера и показывал последние изменения?

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

    Соответственно, сайт выдаёт сводную инфу и крохотный скрипт, который проверяет, устарели данные или нет. Если устарели, то очищает сохраненные данные и загружает новые.

    Можно даже по-умному это всё делать. Например, так:
    1) Мини скрипт проверяет актуальность базы (когда она была загружена).
    2) Дальше шлет мини запрос (ajax) на сервер с указанием этой даты.
    3) Сервер проверяет, что изменилось с той даты.
    4) Сервер высылает новые данные только с изменениям. Например: товар 555 удалить, товар 777 добавить, товар 999 изменить цену на 14.99
    5) Клиент принимает небольшую порцию данных и актуализирует локальную базу в localStorage
    Ответ написан
    Комментировать