• Существует ли вход в google drive такой же как обычный вход в google?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Существует.
    spoiler
    628a9734dc810918927333.png
    spoiler
    628a97163bde7278928955.png
    Ответ написан
    3 комментария
  • Как узнать что за кодировка?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Каждая цифра имеет 10 вариантов (от 0 до 9).

    Каждая буква имеет чуть больше вариантов, в зависимости от алфавита (a-zA-Z это 52 варианта, но некоторые буквы могут быть специально исключены по каким-то соображениями). А если это символ, который может быть как буквой, так и цифрой, то вариантов ещё больше (например, 62). В кодировке base64 добавляются ещё пара символов, чтобы было круглое число 64, хотя реально там чуть сложнее.

    Количество вариантов - это условно мера информации, которую можно запихнуть в символ (или в строку соответственно).

    Для строки количество вариантов можно посчитать перемножением для каждого символа. Например, строка из двух цифр (от 00 до 99) - это 100 вариантов (10*10). Три цифры - 1000 вариантов и так далее. Аналогично с буквенно-цифирным алфавитом. Набор из двух таких символов - это 62*62 = 3844 варианта. Здесь уже чётко видно, что три цифры можно перевести в два символа без потери информации.
    То есть NNN ----> CC, где N - цифра, C - буква или цифры, с учётом регистра.
    То есть символов нужно меньше, чем цифр.

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

    Обратное кодирование примерно такое же, только все шаги в обратную сторону делаются.

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

    ...Либо заниматься хакерством - пытаться подобрать алгоритм кодирования.

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

    dollar
    @dollar Куратор тега Lua
    Делай добро и бросай его в воду.
    Очевидно, что нужно перебрать значения в цикле.
    Очевидно, что раз уж мы не можем перебирать отсутствующие значения, то нужно перебирать присутствующие значения, то есть перебираем вторую таблицу.
    Таким образом, переформулируем:
    вывести только те значения, которые есть во второй таблице, но при этом отсутствуют в первой.
    spoiler
    local table1 = { [1] = "q", [2] = "p" }
    local table2 = { [1] = "q", [2] = "p",  [3] = "f"}
    
    for k,v in pairs(table2) do
        if not table1[k] then
            print(v)
        end
    end

    Если же соответствие ключей не учитывается, то решение будет чуть сложнее. Для больших таблиц лучше их переделать под новый формат, в котором ключами будут значения:
    local table1_fixed = { q = true, p = true }
    Далее можно будет проверять присутствие значения в первой таблице по ключу.
    Ответ написан
    Комментировать
  • Как запретить удалять в инпуте первый символ?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Вынести его за пределы инпута.
    Как вариант - наложить его сверху полупрозрачностью, а текст внутри инпута сместить правее с помощью css.
    Ответ написан
    Комментировать
  • Как грамотно сделать обзор фильмов?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Зачем какой-то приём был использован - это вопрос к автору ролика.

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

    dollar
    @dollar
    Делай добро и бросай его в воду.
    S0wB1hC.gif

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

    dollar
    @dollar
    Делай добро и бросай его в воду.
    А вы уверены, что видимый вам никнейм @sefwfew является для бота строкой "@sefwfew"?

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

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Попадает очередь в порядке вызова setTimeout, а не в порядке компиляции.
    Сначала вызывается timeout2, лишь потом срабатывает then и timeout1 вместе с ним.
    Ответ написан
    Комментировать
  • Разница между requestIdleCallback и setTimeout?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Для начала вам нужно понять главное: ложки «периода простоя» не существует.

    setTimeout() запускает код НЕ РАНЬШЕ, чем указанный в параметре интервал времени. Если указали 5000, то должно пройти не меньше 5 секунд.

    Если вы запустили таймер 5000, затем через секунду запустили таймер 2000, затем какая-то функция нагрузила браузер непрерывной работой на 10 секунд, то второй таймер будет иметь приоритет над первым, хотя и был создан позже первого.
    доказательство
    function sleep(ms) { //примерное время, CPU-зависимо
      let tm = performance.now();
      for (let i=0;i<1000000*ms;i++) { let x = i*i }
      console.log('sleep(' + (performance.now()-tm).toFixed() + ') - done.')
    }
    
    setTimeout(e=>console.log('first'), 5000);
    sleep(1000)
    setTimeout(e=>console.log('second'), 2000);
    sleep(9000)


    requestIdleCallback(), насколько я понимаю, вызывает код в ближайший «интервал простоя» в порядке очереди и код может быть вызван РАНЬШЕ указанного timeout (а может и позже, смотря когда будет «простой»).
    пример, когда после setTimeout
    function sleep(ms) { //примерное время, CPU-зависимо
      let tm = performance.now();
      for (let i=0;i<1000000*ms;i++) { let x = i*i }
      console.log('sleep(' + (performance.now()-tm).toFixed() + ') - done.')
    }
    
    setTimeout(e=>sleep(1000),100);
    setTimeout(e=>sleep(1000),100);
    setTimeout(e=>sleep(1000),100);
    setTimeout(e=>sleep(1000),100);
    setTimeout(e=>sleep(1000),100);
    setTimeout(e=>sleep(1000),100);
    setTimeout(e=>sleep(1000),100);
    setTimeout(e=>sleep(1000),100);
    setTimeout(e=>sleep(1000),100);
    setTimeout(e=>sleep(1000),100);
    
    requestIdleCallback(e=>console.log('first'),{timeout:5000});
    requestIdleCallback(e=>console.log('second'),{timeout:4000});
    sleep(1000);
    пример со вклиниванием в очередь setTimeout
    function sleep(ms) { //примерное время, CPU-зависимо
      let tm = performance.now();
      for (let i=0;i<1000000*ms;i++) { let x = i*i }
      console.log('sleep(' + (performance.now()-tm).toFixed() + ') - done.')
    }
    
    setTimeout(e=>sleep(2000),0);
    setTimeout(e=>sleep(2000),1000);
    setTimeout(e=>sleep(2000),2000);
    setTimeout(e=>sleep(2000),3000);
    setTimeout(e=>sleep(2000),4000);
    setTimeout(e=>sleep(2000),5000);
    setTimeout(e=>sleep(2000),6000);
    setTimeout(e=>sleep(2000),7000);
    setTimeout(e=>sleep(2000),8000);
    setTimeout(e=>sleep(2000),9000);
    
    requestIdleCallback(e=>console.log('first'),{timeout:5000});
    requestIdleCallback(e=>console.log('second'),{timeout:1000});
    sleep(1000);
    пример, когда наступает «период простоя» до фактической разгрузки
    function sleep(ms) { //примерное время, CPU-зависимо
      let tm = performance.now();
      for (let i=0;i<1000000*ms;i++) { let x = i*i }
      console.log('sleep(' + (performance.now()-tm).toFixed() + ') - done.')
    }
    
    var cnt = 10;
    function timer() {
      sleep(1000);
      cnt--;
      if (cnt > 0) setTimeout(timer,300);
    }
    
    setTimeout(timer,300);
    
    requestIdleCallback(e=>console.log('first'),{timeout:5000});
    requestIdleCallback(e=>console.log('second'),{timeout:4000});
    sleep(1000);


    requestIdleCallback() рекомендуется использовать, когда время выполнения вам не критично, при этом вы не хотите тормозить анимации, нажатия на кнопки и пр. Это всякие не важные задачи.
    А setTimeout() лучше использовать тогда, когда вам нужно выполнить функцию через указанный интервал времени, но как можно скорее. Например, если от этого зависит контент на странице, без которого её отзывчивость не будет иметь смысла.
    Ответ написан
    Комментировать
  • Как правильно вернуть массив?

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

    return final;
    Ответ написан
    Комментировать
  • Можете поверхностно сказать что делает код?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Это обфусцированный код. Из-за этого нельзя поверхностно взглянуть на код и сказать, что он делает. Только после анализа можно будет сказать. Автор кода хочет, чтобы даже анализ давался сложно, чтобы аналитик потратил много времени и в идеале - отказался от идеи вскрывать этот код.

    Поэтому ответ на вопрос: не можем.

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

    P.S. "Буквально минутку внимания" - риторика на уровне школьника, либо хитрого провокатора. И то, и другое - не в вашу пользу.
    Ответ написан
    Комментировать
  • Почему медленно загружаются страницы в интернете?

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

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

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

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

    На всякий случай проверять доступность и качество сервисов Ökko и КиноПоиска вы также можете на своей стороне, чтобы исключить их. (Опять же, перепротягивать что-либо не требуется!).

    Понимаю, что решение немного выходит за рамки специалиста тех. поддержки. Дальше вам решать, что с этой информацией делать.
    Ответ написан
    1 комментарий
  • Как понять в коде сложность алгоритма?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Мат. анализ и практика программирования помогают в этом. Да, это большие области знаний.

    Кратко можно ознакомиться здесь:
    https://ru.wikipedia.org/wiki/«O»_большое_и_«o»_малое

    P.S. Простого ответа нет. Никто не говорил, что будет легко. Даже есть поговорка: тяжело в учении - легко в бою. Ну а если в учении легко, то в бою - верная смерть.
    Ответ написан
    Комментировать
  • Почему включенные уведомления отключены?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Жми сюда:
    626b73e8d79aa084505396.png
    Ответ написан
    Комментировать
  • Решаю много одинаковых Google анкет, можно ли сделать, чтобы ответы сохранились?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Можно, но это будет противоречить защите от накрутки. Поэтому не ожидайте, что будет легко.
    Ответ написан
    Комментировать
  • Как вернуть первые N максимальных элементов из массива без сортировки массива?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Строго - никак.

    Есть разные алгоритмы частичной сортировки с минимальной сложность O(N+KlogN), где K - количество максимумов, а N - размер массива, но совсем без сортировки не получится в общем случае.

    Если не строго, то сильно зависит от специфики задачи, из которой нужно взять какие-то доп. условия и допущения. Именно они позволят оптимизировать алгоритм.

    Например, если K не строгое, а лишь примерное, то можно прикинуть некий порог, выше которого эти элементы будут расположены. Скажем, K=10, N=1000 элементов, и в каждом случайное число от 1 до 1000. Тогда можно почти уверенно заявить, что все искомые элементы больше 970. Пробегаем массив один раз и находим все элементы больше 970. Их окажется около 30 плюс-минус. Главное, что не менее 10. Далее этот маленький массив можно отсортировать, но это снова сортировка.
    Ответ написан
  • Как изучать вещь, про которую нету никаких уроков в Интернете и документация не понятна?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Если документация есть, то это уже хорошо.
    Значит, нужно обратиться к тому, кто эту документацию написал.
    Здесь, конечно же, важно, насколько тот субъект заинтересован в том, чтобы документация была тебе понятна вообще. Может быть, это документация для внутреннего пользования, а к тебе она попала случайно, или что-то в этом роде. И даже если заинтересованность есть, может не быть времени и других ресурсов, чтобы тебе что-то объяснять и организовывать уроки.
    В последнем случае придётся либо самому изучать вещь и даже составлять документацию по ней. А почему нет? Документацию тоже люди пишут. И обратный инженеринг никто не отменял ещё, он существует как явление. Либо отказаться от этой вещи в пользу другой вещи, которая более понятна, более документирована, и её авторы больше заинтересованы в создании уроков и прочего, чтобы сделать свою вещь популярной.
    Ответ написан
    Комментировать
  • Как сделать чтобы рандом всегда давал новые значения?

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

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

    P.S. на заметку:
    На первое место выпадает шанс не 10%, а всего 5% случаев. И ещё 5% не будет попадать в границы массива, что будет приводить к ошибке.
    ((0.00)*10).toFixed() // "0"
    ((0.01)*10).toFixed() // "0"
    ((0.04)*10).toFixed() // "0"
    ((0.05)*10).toFixed() // "1"
    ((0.94)*10).toFixed() // "9"
    ((0.95)*10).toFixed() // "10"
    ((0.96)*10).toFixed() // "10"
    Ответ написан
    Комментировать
  • Удаленная диагностика apple. Безопасно ли?

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

    disclaimer
    Но всё же напомню, что 100%-й безопасности не существует. У кого много ресурсов (типа денег и времени), тот рано или поздно откроет любые двери. Ну и банальную лажу никто не отменял - есть шанс, что она случится даже в серьёзной компании, и инцидент с утечкой тому подтверждение. Просто в серьёзных компаниях шанс лажи гораздо меньше. Хотя, чем больше популярность компании и её аудитория, тем больше шанс, что даже малозначительная лажа всплывёт. Так что если лажа случается раз в 10 лет, то это очень хороший показатель безопасности.
    Ответ написан
    Комментировать
  • Есть ли аналог this в lua?

    dollar
    @dollar Куратор тега Lua
    Делай добро и бросай его в воду.
    Да.
    self
    Ответ написан
    Комментировать