Задать вопрос
  • Почему nginx устанавливается в etc, а не в bin?

    @pfg21
    ex-турист
    пакет стандартной версии nginx-core устанавливает испоняемый бинарь програмки в /usr/sbin/nginx
    и имеет в зависимостях пакет настроечных файлов nginx-common который распихивает кучу настроек по соответствующими путям.
    что еще непонятно ?? :)
    Ответ написан
    Комментировать
  • Как отлавливать все ошибки, чтобы приложение не останавливалось?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    Добавить блоки try-catch в критичных местах - особенно на операциях ввода/вывода. Так же следует отловить конкретно эту ошибку и выяснить где именно она возникает. Есть возможность отлова глобальных ошибок:
    https://nodejs.org/api/process.html#event-uncaught...
    process.on('uncaughtException', (err, origin) => { ... });

    Плюс, есть такие полезные утилиты, как PM2 например, которые позволяют автоматически перезапускать приложение в случае падения.
    Ответ написан
    1 комментарий
  • Что быстрее SQL или Javascript?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    В общем, чтобы не издеваться над девушкой, объясним на пальцах.

    Во-первых, заголовок у вопроса чудовищно некорректный. Это все равно что спросить, "что быстрее - пылесос или стиральная машина?"
    Во-вторых, ответ на вопрос "производить ли обработку данных в БД или же запросить все данные в клиентское приложение и обрабатывать там" совершенно очевиден: обработку данных следует производить в общем случае только в БД. Она для этого и придумана. Чтобы обрабатывать значительные объемы данных.

    Да, js тоже "может" обрабатывать большие объемы данных.
    Но чтобы значительный объем данных обработать, его сначала надо передать, полностью забив канал между сайтом и базой
    Чтобы значительный объем данных обработать, его надо сначала проиндексировать. Причем делать это каждый раз, а не использовать уже имеющийся набор индексов
    Чтобы значительный объем данных обработать, надо иметь значительный объем памяти или упасть из-за её недостатка
    Чтобы значительный объем данных обработать в многопоточном режиме (а сайт как раз является многопоточной системой), все вышеперечисленное надо умножить на количество посетителей сайта - при каждом запросе перегонять весь массив данных, выделять память, индексировать, считать. Если же вы оставляете все данные в памяти приложения, то их тогда надо как-то синхронизировать с БД. То есть вы себе собираете кучу проблем на пустом месте.

    Несомненно, из любого правила есть исключения. И бывают ситуации, когда приходится считать в приложении.
    Но на вопрос в общем виде ответ будет совершенно однозначный. Не "может так, может сяк", а только в БД.
    Ответ написан
    9 комментариев
  • Почему при удалении куки возникает ошибка Warning: Cannot modify header information?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Чтобы решить эту проблему, надо научиться пользоваться интернетом.
    В частности, освоить такой сложный навык, как взять сообщение об ошибке, вставить в адресную строку своего браузера, и нажать enter
    И после этого с удивлением обнаружить, что объяснений этой ошибки существует несколько миллионов.
    Например https://ru.stackoverflow.com/questions/284578/

    И заодно не помешает научиться задавать вопросы. Чтобы не спрашивать про то, что вы и так знаете.
    Ответ написан
    4 комментария
  • Ноутбук для инфобеза?

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

    Vindicar
    @Vindicar
    RTFM!
    Ну для начала что значит "атака"? Какую угрозу ты ожидаешь? Потому что ответы будут ОЧЕНЬ разные в зависимости от этого.

    IP бота можно будет попробовать узнать, если ты знаешь, что бот проходит по ссылкам, которые ты можешь ему отправить. Тогда, скинув боту ссылку на свой сайт, можно будет посмотреть, какие адреса заходили в этот момент.
    Если бот такого не делает, то скорее всего никак.

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

    Потыкать команды бота на пример SQL-инъекции? Если бот вообще использует БД, достаточно использовать стандартные средства подстановки параметров в запросы, а не колхозить SQL чере зформатирование строк.

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

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

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    Хранить html код в столбце поста кажется нецелесообразным по ряду причин:
    Угу, ага...

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

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

    Использовать собственные минифицированные теги, благодаря которым определенный парсер будет воссоздавать нужные блоки с помощью компонентов (возможно динамичесих)
    Ага, переизобретаем BBCode, найс... Для понимания проблемы - такие коды придуманы для форумов, с целью ограничить использование хтмл в пользовательском вводе. При этом подходе он худо-бедно оправдан, хотя и требует постобработки при каждом выводе, а это использование регулярок, что как бы совсем не бесплатно. В вашем же случае, источник текста более-менее доверенный, и ограничение в тегах больше мешает чем помогает.
    Что касается экономии на "минифицированных" тегах, ну допустим сэкономите вы 100 байт на тегах, то есть на 1000 постов экономия будет.... ТА-ДАААМ! 0,1 мегабайта! А если экономия 1000 байт на пост, то целый МЕГАБАЙТ можно сэкономить! Похвальная рачительность.

    Хранить каждый элемент поста отдельно в бд со следующим содержанием (element_name, position, content, post_id), используя отношения к родительскому посту, соответственно сохранится структура и рендериться пост будет через соответствующие компоненты в нужном порядке (однако как будет именно рендериться в шаблоне поста пока неизвестно)
    Базовые элементы и так должны храниться отдельно, другой вопрос почему они у вас рендерятся в одном порядке, а в другом месте в другом порядке? Заголовок, короткое описание, текст, главное изображение - отдельные поля, оглавление по сути часть текста, зачем его выносить отдельно - загадка, это же такой же текст, котрый автор волен располагать . Вариант с внешней таблицей по сути приводит нас к выносу части данных в EAV(отличный пример универсализации в ущерб производительности), что как раз будет серьезно напрягать выборки бд, если понадобится делать какие-либо поисково-выборочные манипуляции по этим данным.
    Ответ написан
    6 комментариев
  • Как правильно покрыть WiFi сетью квадрат 5х5 км. на 100 000 человек?

    SignFinder
    @SignFinder
    Wintel\Unix Engineer\DevOps
    Правильно - идти к профессионалам, которые будут гарантии связи по ТТХ давать.
    Они разворачивают сеть из специализированных точек доступа с mesh сетью и контроллерами.

    А вообще предполагаю, что вопрос отвечается простым гуглением типа "wifi для фестиваля"
    Ответ написан
    2 комментария
  • Как правильно настроить dram + cpu?

    vaut
    @vaut
    Обычная настройка разгона:
    1. ставим желаемую частоту процессора и максимально приемлемое напряжение и сразу проверяем. Если тест стабильности не проходит, уменьшаем хотелки.
    2. понижаем напряжение с контролем стабильности.
    3. чуть чуть понижаем частоту и поднимаем напряжение, что бы не было сюрпризов.
    4. выставляем желаемую частоту памяти и максимально приемлемое напряжение, расслабляем тайминги от души. Понижаем частоту если не заводится.
    5. понижаем тайминги (не забываем про постоянные тесты)
    6. пытаемся понизить напряжение. Делаем небольшое повышение после нахождение минимума.

    Спустя несколько дней перезагрузок радуемся приросту производительности в играх в зоне погрешности измерений, так как упор шел в видеокарту. И еще неделю спустя после внезапных сбоев возвращаемся на стоковые настройки.
    Ответ написан
    2 комментария
  • Как на выделенном сервере создать несколько dev окружений?

    Sanes
    @Sanes
    Не надо ничего выдумывать с виртуалками. LEMP прекрасно изолируется и конфигурируется на уровне пользователя и php-fpm pool. Если требуются какие-то дополнительные ограничения, то есть Cgroup и Disk Quota.
    Ответ написан
    Комментировать
  • Как парсить приложение на андройд?

    hottabxp
    @hottabxp
    Сначала мы жили бедно, а потом нас обокрали..
    1 комментарий
  • Как парсить приложение на андройд?

    Steel_Balls
    @Steel_Balls
    да, возможно. Но только на андроиде, а андроЙде нельзя
    Ответ написан
    Комментировать
  • Как сделать в MySQL изменение поля строки через время?

    Lastor
    @Lastor
    В чем сила, брат? В ньютонах.
    Вообще это очень нерационально гонять mysql почем зря каждую секунду.
    Более целесообразно при выборке вместо поля suc проверять разницу текущего времени с полем date.
    например
    select * from tableName where `date` > now() - interval 10 day

    А если suc принципиально нужен, то:
    select id, login, `date`, (`date` > now() - interval 10 day) as suc from tableName
    Ответ написан
    Комментировать
  • Возможно ли обучить ИИ определять данные анализов по фото?

    Тут больше задача на OCR и машинное зрение похожа.
    Нужно определить границы таблицы и распознать текст в ячейках.
    Можно попробовать Opencv + tesseract.

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

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    Простой ответ: что вы хотите - это вордпересс, цмс с изначально не оптимальной структурой, так как не возможно сделать и быстро и универсально, чем-то приходится жертвовать.

    Сложный ответ: Для того чтобы выявить проблему используют логирование и профилирование. В лог пишутся все запросы к бд или места где предполагается длительное выполнение кода (например запросы к апи или другим сайтам). Затем анализ, потом нахождение решения и фикс.
    Профилирование же состоит из комплекса действий по нахождению узких мест. В частности код условно делится на блоки, затем выполнение каждого блока замеряется и выясняется какой блок создает задержки. Далее соответственно данный блок дробим до тех пор пока не находим конкретное место проблемы. 80% вероятности что это будет какой-то запрос, с выборкой из нескольких таблиц и структурами по типу EAV, 18% что запрос к какому-то апи/сайту и 2% что тормозит именно криво написанный код (хотя это вордпресс, тут вероятности примерно равные). Что делать зависит от того что за проблема в конкретном случае. Иногда надо что-то закешировть, иногда править запрос, добавлять индексы, возможно что-то менять в структуре. Тут уже от ситуации...
    Ответ написан
    5 комментариев
  • Как исправить ошибку php Call to a member function bind_param() on boolean in?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Call to a member function bind_param() on boolean
    Где вызывается bind_param()?
    $stmt->bind_param("ssisss", $plaintiffs_json, $respondents_json, $type, $reason, $petition, $video);
    Где stmt получает значение?
    $stmt = $conn->prepare("INSERT INTO `cases`(`nickname`, `respondent`, `type`, `reason`, `petition`, `video`) VALUES (?, ?, ?, ?, ?, ?)");
    В каком случае prepare может вернуть значение типа boolean?
    mysqli_prepare() returns a statement object or false if an error occurred.
    Вывод - при вызове prepare возникает ошибка.
    Как найти ошибку? Либо проверить $conn->error после вызова prepare, либо, что правильнее, сразу настроить mysqli на выброс исключений при ошибке, добавив перед соединением с базой вызов
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    Ответ написан
    Комментировать
  • Что за шифр или комбинация шифров?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Дружище так нельзя делать. Криптоанализ предполагает что ты знаешь что ищешь.
    Из какого приложения ты это скопировал? Что ожидается? Хешированный пароль?
    Магнитная ссылка? И мы должны знать контекст. А может ты взял задачу на cryptohack
    и пришел сюда за подсказкой? Так нельзя! Иди в тот форум и там спрашивай.

    У них условие даже есть что участники не обсуждали задачи на стороне.
    Ответ написан
    Комментировать
  • Хорошая ли стратегия разбивать монолит джанго на микросервисы джанго?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Смотри. Уже прошло время когда все пилили монолиты на микросервисы. Щас пошло переосмысление.
    Объективно есть 2 причины пилить. Первое - организационная. Команда по какой-то причине не хочет
    или не может поддерживать приложение. Или там что-то с бизнесом. Слияние. Поглощение. Передача
    проекта другой команде в поддержку. Тогда берут и ставят задачу раздела отвественностей.
    Конвей про это писал еще.

    И второе - это баланс нагрузки и децентрализация. Про failover тут еще даже речи нет. Это
    тяжелая тема и распилить монолит так чтобы его части были отказоустойчивы очень трудно. Более
    того в случае синхронных взаимодействий между частями микросервисов может быть даже падение
    перформанса
    . Да. Теоретики которые там пишут восторженные отзывы - совершенно игнорируют
    накладные на RPC. И не упоминают что в монолите цена RPC была равна нулю. Иногда RPC заменяют
    на MQ - но это новая архитектура и это надо полностью переделывать бизнес.

    И что делать с базой данных? Это тот еще вопрос. Я почти готов спорить что вы базу пилить не будете.
    И что в результате будет? Иммитация микро-сервисов? Где слабая связность?

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

    Но имеет смысл сделать модуляризацию монолита. Например что там...
    application
    - sales
    - hiring
    - userprofiles

    Тоже очень полезно для управления сложностью. И пускай себе будет монолит зато будет сильный
    контроль за изменениями.
    Ответ написан
    6 комментариев
  • Как взять содержимое div (текст) и поместить в php?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    AlexandraSvetik, сначала научитесь формулировать вопрос правильно - тогда и ответы будут соответствовать вашим хотелкам. Вы ни словом не обмолвились, а откуда же вообще возмётся этот HTML-код, в котором нужно искать div с test.

    <?php
    $html_text = '<html><body><div class="test">dasadasdas</div></body></html>';
    $text = "";
    if (preg_match("#<div class=\"test\">(.*?)</div>#si", $html_text, $regs))
    {
        $text = $regs[1];
    }
    var_dump($text);
    ?>

    Вот, всё тютелька-в-тютельку то, что вы хотели в вопросе! Теперь довольны? Ах всё совсем по другому должно быть? Тогда стирайте свой вопрос, и тщательно продумывайте, формулируйте новый!
    Ответ написан
    9 комментариев
  • Занесение данных из формы в базу данных?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Надо выкинуть на помойку учебник, из которого взят этот код, пройти по ссылке, и написать нормальный на основе информации оттуда

    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    $conn = new mysqli("зачем", "вам", "это", "знать?");
    
    $name = $_POST["name"];
    $login = $_POST["login"];
    $pass = $_POST["password"];
    
    $sql = "INSERT INTO admins (login, pass, name) VALUES (?,?,?)";
    $stmt = $conn->prepare($sql);
    $stmt->bind_param("sss", $login, $pass, $name);
    $stmt->execute();
    
    $id = $conn->insert_id;
    header("Location: profile.php?id=$id");


    Пара замечаний
    • отдельная таблица админов обычно не делается, достаточно общей таблицы пользователей
    • id вставлять не надо, его должна генерировать БД
    • после успешной обработки прямого POST запроса обязательно должен быть редирект. Обычно это либо созданная учетка, или страница входа или список пользователей или что-то ещё
    • при обработке прямого запроса никаких echo в коде быть не должно
    Ответ написан