• Какой ноут взять под Kali Linux для программирования в 2022?

    @bacon
    желания Kali, это признак мамкинова кулхацкера, не нужен он тебе, пока не научишься что-то толковое делать
    Ответ написан
    Комментировать
  • Как расширит диапазон используемых функций в php?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Какой-то странный вопрос.
    Во-первых, использование функций - не самоцель. Образованный человек отличается от пэтэушника в первую очередь не словарным запасом, а тем, что умеет выражать свои мысли четко и понятно. И может написать большой текст так, чтобы его было удобно читать.
    А какие слова он при этом использует - дело десятое. Да, можно иногда сократить текст, используя общепринятый термин вместо его описания, но это не принципиально.
    Так же и с кодом. Он должен быть четким, красивым и осмысленным.

    Во-вторых, встроенные функции - это вообще какая-то ерунда. Используется раз в неделю. Куда важнее умеешь ли ты пользоваться библиотеками. Вот где эрудиция-то проявляется. Сидишь ли на коленке колупаешь CURLOPT или используешь гузлю. mail или phpmailer. И так далее.
    Как в анекдоте - ты уже не сам анекдот рассказываешь, а только номер называешь.

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

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

    Но если для общей эрудиции, если совсем словарный запас совсем мизерный, можно на ночь читать списки функций для работы со строками и массивами.
    Ответ написан
    4 комментария
  • Как получаются ответ на DNS запроса рекорда SRV?

    DNS сервер всегда отдает все записи запрошенного типа для данного имени, в тч все MX/SRV записи.

    _Клиентом_ выбирается MX с минимальным весом, в случае его недоступности или нефатальной ошибке отправки - с более высоким весом и тд, если у нескольких mx одинаковый вес - порядок между ними выбирается случайно. Поэтому клиенту нужны все MX записи. Примерно так же и с SRV, но там приоритет обеспечивается порядком priority и в рамках одного приоритета выбор между хоставми производится случайно, распределение вероятности задается весом. Т.е. берутся все хосты с минимальным priority и среди них выбирается случайный, но не равновероятно а в соответствии с весом (например если у одного вес 100 а у другого 200 то вероятность выбора второго вдвое выше). Плюс клиент может еще и рассматривать альтернативы между разными сервисами (например между _smtp._tcp и _smtps._tcp) или отдавать предпочтение определенному порту или сети.

    На стороне сервера может быть лишь реализован round robin - случайное перемешивание записей, при перемешивании веса и приоритеты не учитываются. round robin требуется стандартом но по факту делается не всеми, например гугловые резолверы (которые 8.8.8.8) его не делают.
    Ответ написан
    Комментировать
  • Как перейти в папку в директории home?

    cd ~
    Ответ написан
    Комментировать
  • Очень быстро лить в БД 1 млн. строк в секунду и настолько же быстро читать их. Как лучше осуществить?

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

    alexgp13
    @alexgp13
    Руководитель ИТ-проектов
    Если честно, то на рынке ИТ все сейчас очень сложно. Причин несколько, а анализ легко растянется на полноценную статью, даже была мысль написать наХабр и Линкедин по этой теме. Постараюсь коротко пройтись по основным трендам.
    1. Доступность удаленной работы, соответственно регионы и Индия с низкими зарплатами ворвались на рынок.
    2. Миф о высокой зарплате. Когда то так было, сейчас курьер Яндекс-еды зарабатывает больше, чем средний программист. Про продажников даже не хочу говорить, знаю людей, легко имеющих и по миллиону в месяц.
    3. Мифы о легком старте. На самом деле точка входа в профессию достаточно высока, так как мало освоить навыки кодера, нужно еще иметь логическое мышление, знать математику, анализ, разбираться в предмете (физика для игр, экономика для 1С, производство для автоматизации и многое другое). И, возвращаясь к пунктам 1 и 2, за хорошую зарплату придется после пары месяцев курсов конкурировать с индусами, которые имеют по 10 лет опыта, с регионами, где есть специалисты с 20-летним опытом, готовые работать за зарплату джуна в Москве.
    4. Отдельно выделю сильно усложнившиеся программы, сложность разработки, несмотря на множество облегчающих жизнь инструментов, за последние годы выросла достаточно сильно.

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

    Надеюсь, ответил достаточно понятно)
    Ответ написан
    4 комментария
  • Как сделать эффект рисования?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    3 комментария
  • Куда двигаться дальше?

    DevMan
    @DevMan
    Нормальная ли ситуация, при которой разработчика пытаются бросать в разные направления?
    не нормальная.
    но довольно обыденная. особенно у аут–сорсеров/стафферов.

    я бы спокойно ушел в swift:
    1. приятная (по крайней мере для меня) платформа.
    2. ограниченный список устройств.
    3. нет особой гонки технологий/фреймворков/etc.
    4. достаточно востребованная область.
    да и начнете не с нуля: база у вас уже есть.
    Ответ написан
    1 комментарий
  • Что за кодировка?

    @mrantony Автор вопроса
    Вот тут хорошая инфографика по этому поводу.
    https://habr.com/ru/post/147843/
    Ответ написан
    1 комментарий
  • Что не так с решением задачи?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Ваша идея не верна.

    Надо порисовать на бумажке и убедится, что из строки S вы можете получить только строки вида S(k1)S(k2)S(k3)...S(kn), Где S(x) - x-ый префикс строки S, т.е. первые x символов.
    При этом k1 >= k2, ... k1>= kn.

    При чем все строки такого вида можно получить.

    Доказывается по индукции по количеству операций. Изначально строка именно такого вида (k1=длина строки). После каждой операции, эта строка сколько-то раз копируется и как-то обрезается по длине. Поэтому любая полученная строка будет такого вида. И каждую такую строку можно построить: применяйте операции с k равными k1, k1+k2, k1+k2+k3... Так вы за n операций соберете все префиксы по одному.

    Теперь, раз вам во входном файле задана подстрока результата, вам надо проверить, что эта строка состоит из подстроки S, за которой идут префиксы строки S.

    Так, пример из условия bcabc состоит из подстроки bc и одного префикса abc.

    В задаче не очень большие ограничения, поэтому можно в тупую для каждой подстроки i..j результирующей строки определить, является ли она суффиксом первой строки. Также для каждой подстроки первой строки можно определить, является ли она префиксом второй строки.

    Потом нужно построить граф: из позиции 0 сделайте ребра во все позиции, где заканчивается какая-то подстрока первой строки в начале второй. Из позиции i>0 сделайте ребра во все позиции j такие, что подстрока i...j префикс первой строки.

    Потом, если в этом графе есть путь из вершины 0 в вершину с номером длины второй строки - YES. Иначе - NO.

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

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Можно попробовать вычислить корень быстрым алгоритмом. Но там сложно. Гуглите Karatsuba square root. Есть открытые реализации. Есть еще какой-то адский метод через быстрое преобразование Фурье, попробуйте погуглить и его.

    Более простой в реализации, но менее быстрый метод вычисления корня - бинарный поиск. Храните l, r, l^2, r^2 и lr. По этим числам можно вычислить m=(l+r)/2, m^2, m*l, m*r без длинных умножений, а только складывая длинные числа и деля на 2. Вам надо поддерживать, чтобы l^2 <= n <= r^2. Изначально можно сделать l=1, r=10^51 (или больше - половина длины входного числа + немного, чтобы точно квадрат был больше n), потом делить отрезок пополам и отбрасывать ненужную половину.

    Еще есть вероятностный метод через символ Лежандра/Якоби. Это будет самым быстрым методом.

    Это как смотреть на последнюю цифру. Квадраты могут давать там 0, 1, 4, 9, 6, 5. Но нет ни одного квадрата, который оканчивался бы на 2. Т.е. если число заканчивается на 2, то можно сразу говорить, что это не квадрат. Это мы взяли остаток от деления на 10 (последняя цифра) и посмотрели, какие из них хорошие. Вот символ Лежандра - это такая проверка для модуля по любому простому числу (а не 10).

    Если брать некоторое простое число p, то n может быть квадратом, только если символ Лежандра (n/p) - равен 1 или 0 (По научному: n - должно быть квадратичным вычетом).

    Если брать небольшие (<64-битные) простые числа, то можно за линию считать n%p и потом вычислять символ Лежандра (n%p/p) по алгоритму через символ Якоби за O(log(p)^2). Когда подсчитали символ Лежандра и если он -1, то n - точно не корень.

    Тут проблема в том, что это необходимый, но недостаточный критерий - если для какого-то p вы получили -1 - то это точно не квадрат. Но возможно можно подобрать такое число, что все ваши тесты дадут 1, а оно не квадрат. Поэтому надо брать много простых чисел. Скажем, 20. Желательно еще числа брать достаточно большими. Но их не надо искать каждый раз, можно захардкодить. Грубая прикидка говорит, что вероятность ошибки такого алгоритма 2^(-количество простых чисел).

    Т.е. берете много простых чисел. Считаете для каждого n%p выполняя деление большого числа на короткое (один проход по массиву цифр). Потом считаете символ Лежандра. Если получили где-то -1 - то точно не квадрат. Иначе - скорее всего квадрат.

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Этот вопрос надо отлить в граните и поместить в палате мер и весов, в виде большой квадратной доски.
    И всех любителей хранить картинки в базе "это же так удобно!!!" заставлять биться об нее головой, пока вся эта дурь из головы не вылетит.
    Ответ написан
    9 комментариев
  • Как скачать видео, начинающееся с blob?

    @TheSima
    Гуглится именно эта страница, но нормального ответа так и нет(не у всех Chrome), решил дополнить от себя.
    Решение(отсюда) для видео HLS такое(для других случаев пока что не нашёл решение):
    1) Определить m3u8 список для того видео которое Вы хотите скачать. Обычно это делается так:
    - Включаем режим разработчика в браузере и открываем(в этом режиме) вкладку сеть.
    - Открываем страницу с видео
    - В появившихся строчках ищем "что-то".m3u8 Например:
    http://example.com/video_url.m3u8
    Это и будет нужная ссылка на "список"
    2) Скачать ffmpeg и скачать с его помощью видео:
    - Под Windows можно здесь(ссылка устарела) здесьскачать из Assets файл ...-full_build.zip или 7z по вкусу, распаковать. Открыть папку bin, зажать Shift и кликнуть правой кнопкой в пустое место в окне папки bin, нажать "Открыть окно команд".
    Под линуксы я думаю, ребята разберуться ;)
    - И ввести следующую команду, заменив ссылку из примера на ссылку из пункта 1:
    ffmpeg -i "http://example.com/video_url.m3u8" -c copy -bsf:a aac_adtstoasc "output.mp4"

    output.mp4 - будет ваше видео) имя файла в команде можно менять ;)
    Ответ написан
    2 комментария
  • Как проверить докер контейнер на вредоносность?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Никак. Все публичные репозитории опасны. В случае PyPI только лично проверять исходный код каждой версии. С докером всё ещё сложнее.
    Ответ написан
    Комментировать
  • Как запретить скачивание любых файлов с сервера?

    Выключить вебсервер
    Ответ написан
    Комментировать
  • В чем проблема этого кода?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    в том что это бессмысленный набор случайных огрызков, надерганных из интернета
    А должно быть так:
    - соединяемся правильно
    - запрос выполняем один
    - переменные передаем в него через подстановки, а не напрямую
    - идентификатор получаем правильно, а не через одно место автогеном
    <?php
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); 
    $conn=new mysqli("localhost","?","?","?");
    $conn->set_charset('utf8mb4'); 
    
    $sql="INSERT INTO products(name,href,price,image_href) VALUES (?,?,?,?)";
    $stmt = $conn->prepare($sql);
    $stmt->bind_param("ssss", $name,$href,$price,$img);
    $stmt->execute();
    echo $conn->insert_id;
    Ответ написан
    Комментировать
  • Конвертировать svg в json?

    Adamos
    @Adamos
    С задачей конвертирования SVG в JSON легко справляется любой конвертер DBF в JPEG.
    Ответ написан
    Комментировать
  • Выбор правильного старта для написания микросервисов?

    Robur
    @Robur
    Знаю больше чем это необходимо
    https://microservices.io/ - много полезных мыслей про микросервисы.

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

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

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

    Как лучше распределить нагрузку между членами команды, и т.п.

    это уже про управление командой.

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

    Zoominger
    @Zoominger Куратор тега Веб-разработка
    System Integrator
    Открыл сайт.
    Не работает прокрутка.
    Закрыл сайт.
    Ответ написан
    Комментировать