Задать вопрос
  • Как скачать с яндекс диска, если стоит защита от скачивания?

    @bmbelka02
    Способ скачивания видео, когда его можно смотреть, я нашёл. Расширение FetchTV умеет по m3u8 плейлисту скачивать все кусочки видео и сохранять как одно целое. С офисными документами пока не разобрался.
    Ответ написан
    2 комментария
  • Как первоначально компилировали сами компиляторы написанные на яву?

    zagayevskiy
    @zagayevskiy
    Android developer at Yandex
    См. "Раскрутка компилятора". Кратко - создаётся (в машкодах, ассемблере, или другом языке) компилятор минимального подмножества языка, пригодного для разработки. Затем на этом подмножестве пишется компилятор, способный скомпилировать само это подмножество. Ну и дальше процесс продолжается итеративно, добавляются фичи в язык, дописывается компилятор и тд.
    Ответ написан
    Комментировать
  • На чём написан язык программирования C?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Учтите, что язык программирования - это просто набор спецификаций и правил. Он написан на английском языке.

    Если же вас интересует на чем запрограммированы компиляторы языка С, то самые популярные нынче развивающиеся компиляторы написаны на C и C++ соответственно:
    gcc: https://github.com/gcc-mirror/gcc
    clang: https://github.com/llvm/llvm-project/tree/main/clang

    Вы спросите, а как компилятор языка Си написали на самом Си? Ответ прост - первые компиляторы были написаны на ассемблере. Они были очень простыми и тупыми, возможно не умели понимать все тонкости языка. Когда появился достаточно работающий компилятор с минимальным набором функций, можно было переписать его на Cи и скомпилировать первым компилятором. После этого стало можно компилировать компилятор на Си самим собой.

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

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

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Никак не называется. Можно структуры комбинировать для ваших задач, но это частные случаи применения структур, не настолько частые, чтобы давать этой комбинации какое-то имя. Если уж хочется назвать это как-то, то это все еще будет хеш-таблица с какими-то вспомагательными пристройками для каких-то дополнительных нужных вам свойств (итерация).

    И вообще, у вас тут намудрено, почему нельзя сделать просто:
    let objects: HashMap<Uuid, Object>;

    Тут все такой же O(1) доступ к элементу по id. Зачем вам массив? Вы там добились простой и cache-friendly итерации по всем объектам? Не факт, что это уже не реализовано внутри HashMap. По крайней мере во многих языках можно проитерироваться по всем объектам в стандартной хеш-таблице.

    Зато у вас там удаление элемента - это что-то сложное. Особенно, если вы не хотите избежать фрагментации и неиспользованного места в массиве.
    Ответ написан
    4 комментария
  • Почему i? Почему переменную, используемую в циклах, обычно называют именно i?

    @alexalexes
    index. А вообще, индексы элементов массива пришли из математики - i, j, k для первых трех измерений.
    Просто, первыми компухтеры оседлали математики, отсюда и традиция в циклах использовать эти буквы.
    Ответ написан
    2 комментария
  • Регистрация по номеру телефона?

    @knigaman
    Первый запрос = принимаем на сервере номер телефона, генерируем токен (случайная строка длиной, предположим, 64 символа - цифры, буквы большие и маленькие), отправляем его на клиент. Генерируем код доступа, отправляем его смской на телефон. В зависимости от логики можем и не отправлять (если допустим у нас метод для логина а такого юзера еще нет (он еще не зарегистрирован)).

    Второй запрос = отправляем с клиента токен (тот 64 символьный полученный от сервера) и строку с кодом из смс. Проверяем на сервере токен и код из смс, если все ок - пускаем в аккаунт.

    Примечания:
    1) токены и сами попытки входа должны жить определенное количество времени, предположим 5 минут.
    2) попытки ввода кода (неправильные вводы) должны быть ограничены разумным числом (ну допустим 5 попыток)
    3) если можно то лучше код сделать длиннее - хотя бы 6 цифр, а лучше 8 и более.
    4) попытки входа в аккаунт можно ограничить, но тогда будет можно абузить эту "фичу" и блокировать вход чувакам, тут выбираем меньшее из зол исходя из бизнес требований
    5) можно экономить на смсках и доставлять код в последних цифрах номера / голосовой озвучкой, отправлять в вк, ватсап, телеграм, вайбер

    500 айкью примечания для кое какой защиты от слива бюджета:
    1) можно юзать капчу (можно не всегда а когда начинается аномалия по отправке кодов - всплеск количества отправок)
    2) как уже и говорил разделение входа и регистрации
    3) ставим бот защиту от какого нибудь сервиса по защите от ддос/бот атак
    4) иногда можно не отправить код а отправить клиенту респонс что код отправлен, если клиент вводит код - скорее всего это атака. человек же запросит код повторно (потому что он тупо ему не пришел)
    5) иногда можно отправить код не сразу а через предположим, 30 секунд - если ввели код раньше - значит что-то не так
    Ответ написан
    9 комментариев
  • Как цикл for влияет на формирования списка?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Дело не в цикле for. Функция pair возвращает генератор, а генератор можно обойти только один раз.
    Ответ написан
    Комментировать
  • Как работать с датой записанной в поле формата числа с плавающей точкой?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Этот способ хранения даты тянется ещё с Lotus 1-2-3. Когда Microsoft добавляла дату/время в Excel, то для совместимости использовали тот же формат.
    Отсчёт ведётся от 30.12.1899. Целая часть - количество дней, прошедших с этой даты, дробная часть - время. Если дробную часть умножить на 24*60*60, то получим количество секунд с начала дня.
    Встроенных функция для преобразования в PostgreSQL нет, так что, видимо, это прямой перенос из чего-то типа MSAccess.
    45672.38114849537 соответствует 2025-01-15 09:08:51.230
    Получить можно, например, так:
    SELECT
      date_lotus,
      '1899-12-30'::date + MAKE_INTERVAL(days => date_lotus::int, secs => ((date_lotus - date_lotus::int) * 24*60*60)::int) AS datetime
      FROM test;
    
    | date_lotus        | datetime            |
    | ----------------- | ------------------- |
    | 45672.38114849537 | 2025-01-15 09:08:51 |
    Ответ написан
    Комментировать
  • Какие ошибки в понимании объектов?

    Maksim_64
    @Maksim_64
    Data Analyst
    (3).__class__- здесь объект создался, затем ты обращаешься к его атрибуту.

    3.__class__ - здесь при его создании произошла ошибка (если быть точным даже на стадии парсинга ошибка), питон пытается спарсить, как float, и у него естественно не получается.
    Ответ написан
    Комментировать
  • Почему при проверке Decimal на принадлежность возвращается false?

    @Everything_is_bad
    заново читаем учебник или доки
    1. выясняем что именно делает is
    2. делаем правильно isinstance(a, Decimal)
    Ответ написан
    Комментировать
  • Как исправить «You have divergent branches and need to specify how to reconcile them»?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Вы не дочитали до конца сообщение об ошибке
    Hint: You have divergent branches and need to specify how to reconcile them.
    Hint: You can do so by running one of the following commands sometime before
    Hint: your next pull:
    Hint: 
    Hint:   git config pull.rebase false  # merge
    Hint:   git config pull.rebase true   # rebase
    Hint:   git config pull.ff only       # fast-forward only
    Hint: 
    Hint: You can replace "git config" with "git config --global" to set a default
    Hint: preference for all repositories. You can also pass --rebase, --no-rebase,
    Hint: or --ff-only on the command line to override the configured default per
    Hint: invocation.

    Гит вам говорит, что история веток разошлась и нужно явно указать, каким методом сливать разные ветки при pull.
    Обычно принято использовать метод merge, поэтому мы либо каждый раз это уточняем:
    git pull --no-rebase
    Либо сохраняем глобальный параметр для всех ваших репозиториев:
    git config --global pull.rebase false
    Ответ написан
    Комментировать
  • Какой алгоритм можно применить при проверки числа на простое ли оно?

    @Mercury13
    Программист на «си с крестами» и не только
    Если нужно проверить а) точно, и б) одно; в) не очень большое число (миллион тоже небольшое) — ничего нет лучше, чем проверка нечётных чисел до корня из n. То есть до 1000.

    Если точно, много и небольшие — то придётся держать список простых чисел, пополняя его, когда попадётся слишком большое число. Список тоже до корня из n. Допустим, если предел — int4 (≈4 млрд), то нужно держать только список до 65535, это пара тысяч чисел.

    Если число совсем небольшое и может быть где-то в списке — ищем его хитрой разновидностью поиска: проверяем 1-е число, 2-е, 4-е и т.д., пока не определим диапазон, где может быть число. И в этом диапазоне ищем двоичным поиском.

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

    PERFECT number — это СОВЕРШЕННОЕ число. Это не то (сумма всех делителей равняется самому числу), и для теста на совершенное число тоже надо проверять до корня из n — если a делится на b, то добавляем и b, и a/b (кроме случаев, когда b=1 и b²=a, разумеется). Если есть простые числа до корня из n — тоже можно разбить на простые множители (один из множителей может быть больше корня из n!) и подключить комбинаторику, чтобы заполучить остальные.
    Ответ написан
    2 комментария
  • Как реализовать факторизацию для числа больше 300 символов?

    @rPman
    Вы хотите разложить на множители 1024бит число? за 20 минут?
    https://ru.wikipedia.org/wiki/RSA-числа
    RSA-240 имеет 240 десятичных знаков (795 бит) и было успешно факторизовано 2 декабря 2019 года Эмманюэлем Томе и его коллегами[6][7]. Для выполнения задачи было использовано несколько кластеров компьютеров в разных странах.
    Ответ написан
    1 комментарий
  • Как в комментарии сделать ссылки на участок кода?

    Adamos
    @Adamos
    /**
     * @link MyClass::myMethod
     */
    
    class MyClass
    {
        static public function myMethod()
    Ответ написан
    1 комментарий
  • Можно ли видео на сайте без сохранение на диск показывать в меньшем разрешении?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Видео в любом случае должно быть кем то сконвертировано, перед отправкой клиенту, варианты:
    - Либо множество заранее подготовленных видео роликов с нужным качеством (ютуб так делает), потребуется сильно больше места на диске, но нагрузка на процессор будет сильно меньше + можно выбрать ночное время для обработки.
    - Либо сервер, который будет конвертировать видео в реальном времени, но нагрузка на процессор будет сильно больше.
    Ответ написан
    5 комментариев
  • Какую мышку выбрать для Macbook?

    xez
    @xez
    TL Junior Roo
    Макбуку не нужна мышка - там трекпад же классный.
    Ну и если брать - то лучше g502, как по мне, ничего нет.
    Ответ написан
    7 комментариев
  • Почему программа не работает?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Проблема в том, что сначала пытаетесь вычислить a^(p-2), а потом взять его по модулю. В задаче числа до 10^9 и если вы попытаетесь вычислить что-то вроде 99999^1000005, то у вас int переменная переполнится, потому что там должны быть миллионы знаков в числе, а в int едва 10 влезает.

    Надо брать по модулю при каждом умножении в возведении в степень.

    Потому что (a*b)%p = (a%p)*(b%p) % p.

    Edit:

    Еще две ошибки: считать произведение надо в long long, потму что 10^9*10^9 в int не влезает.
    И fast_deg(a, deg/2) надо вызывать только один раз, а то у вас функция работает за O(n) вместо O(log n).
    Ответ написан
    2 комментария
  • С какой периодичностью обновляется список сообщений в телеграме?

    Lord_of_Rings
    @Lord_of_Rings
    Дунадан - северный странник. Злой, но очень добрый
    Список сообщений обновляется по факту, а не по таймауту, хотя всё зависит от клиента/сети и т. п.
    Ответ написан
    Комментировать
  • Есть ли какой-либо бесплатный удаленный сервер с долгосрочной перспективой использования, который можно использовать в коммерческих целях?

    @Everything_is_bad
    бесплатный удаленный сервер с долгосрочной перспективой использования, который можно использовать в коммерческих целях
    100500 раз уже сказано, заплати 5$ за минимальный нормальный vps и не страдай фигней
    Ответ написан
    3 комментария