• Можете подсказать практичный список литературы по разработке драйверов для linux и вообще по работе в ядре?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    The Linux Kernel Module Programming Guide: https://sysprog21.github.io/lkmpg/
    Linux Device Drivers: lwn.net/Kernel/LDD3
    Understanding the Linux Kernel: https://doc.lagout.org/operating%20system%20/linux...
    Linux Kernel Development: https://raw.githubusercontent.com/jyfc/ebook/maste...
    Understanding the Linux Virtual Memory Manager: https://www.kernel.org/doc/gorman/pdf/understand.pdf
    Unreliable Guide To Locking: https://www.kernel.org/pub/linux/kernel/people/rus...

    Содержимое каталога Documentation в ядре.
    https://lwn.net/Kernel/Index/ для точечного погружения в отдельные топики.
    Каталог doc с kernel.org: https://www.kernel.org/doc/
    Ответ написан
    2 комментария
  • Может ли яндекс карта указать если адрес находится за МКАД'ом или в его пределах?

    freeExec
    @freeExec
    Участник OpenStreetMap
    Нарисуй себе полигон МКАД и проверяй внутри твой адрес или нет.
    Ответ написан
    Комментировать
  • Я только месяц изучаю С++, где найти ментора который поможет решать задачи?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Начните с более простых задач.

    Если не можете решить простую задачу примерно неделю, то пишите сюда, поможем. А если не можете решить простую задачу целых 5 минут, то продолжайте думать, потому что в таком случае от готового решения пользы будет ноль в плане обучения.
    Ответ написан
  • Почему шаблон django игнорирует id в словаре?

    WStanley
    @WStanley
    Back-end Developer
    1. Тебе надо чтобы твоя модель с комментариями имела ключ сама на себя
    parent = models.ForeignKey("self")
    2. Тебе надо во вью сформировать к примеру вот такой список с данными
    ПС: это делается с помощью рекурсивной функции, гугли (как рекурсивно сформировать дерево, примерно)
    ПС2: в список возможно также стоит включить parent_id и все что необходимо
    comments = [{
        'id': 1,
        'text': 'asdaasd',
        'childrens': []
    },
    {    'id': 2,
        'text': 'asdaasd',
        'childrens': [
            {    'id': 7,
                'text': 'asdaasd',
                'childrens': [
                    {    'id': 12,
                        'text': 'asdaasd',
                        'childrens': [
                            {    'id': 23,
                                'text': 'asdaasd',
                                'childrens': [],
                            },
                            ... # и т.д.
                        ],
                    },
                    ... # и т.д.
                ],
            },
            {    'id': 8,
                'text': 'asdaasd',
                'childrens': [],
            },
            ... # и т.д.
        ],
    },
    {    'id': 2,
        'text': 'asdaasd',
        'childrens': [
            {    'id': 15,
                'text': 'asdaasd',
                'childrens': [],
            },
            {    'id': 19,
                'text': 'asdaasd',
                'childrens': [],
            },
            ... # и т.д.
        ],
    }
    ... # и т.д.
    ]

    3. После этого выкинуть его в шаблон, и в шаблоне можно будет сделать так:
    ПС: там где список childrens пустой значит нет комментариев-ответов
    {%for comment in comments%}
        {{ comment.id }}
        {{ comment.text }}
        {% if comment.childrens %}
             # По идее здесь тоже надо будет организовать рекурсию, для отображения множественной вложенности
             # гугли - django template recursive tree, примерно
             # К вложенным комментариям вот так можно обращаться будет
            {% for children in comment.childrens  %}
                 {{ children.id }}
                 {{ children.text }}
                 {% if children.childrens %}
                      # и т.д.
                 {% endif %}
            {% endfor %}
        {% endif %}
    {% endfor %}

    Вот примерно так все это должно работать если использовать ссылку на себя
    ПС: а вообще для работы с деревом грамотно использовать nested sets что и делается в django-mptt, но это уже совсем другая история :)
    Удачного велосипедирования!
    Ответ написан
    4 комментария
  • Как это называется?

    vabka
    @vabka
    Токсичный шарпист
    Вы открыли exe-шник или библиотеку в блокноте видимо. Читайте про portable executable
    Ответ написан
    Комментировать
  • Как лучше всего делать статичный сайт-одностраничник в 2021-ом?

    tundramani
    @tundramani
    сделай сайт в конструкторе
    или стань программистом и тогда сам поймешь как делаются сайты
    Ответ написан
    Комментировать
  • Почему убунту выдает такие ошибки переустановка не помогла?

    Adamos
    @Adamos
    Ноут, дуал-бут, из винды выходил перезагрузкой?
    Нужно выключить винду (завершить работу).
    В клинических случаях - еще обесточить ноут и вынуть батарею, чтобы точно сбросилось состояние звуковухи.
    Ответ написан
    3 комментария
  • Как можно сделать так что б телеграм бот постоянно спрашивал и записывал ответ пользователя?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Конечно, вы не правильно используете next step handler
    На гитхабе есть хороший пример использования

    https://github.com/eternnoir/pyTelegramBotAPI/blob...
    Ответ написан
    3 комментария
  • Есть ли книги/документация по администрированию сервера, где всё в одном?

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

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

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    База данных всегда сама подробно расскажет, почему у неё не получилось выполнить запрос. Надо её только об этом попросить.

    Поэтому сначала учимся правильно соединяться.
    Весь этот детский лепет "не могу соединиться с БД" выкидываем и пишем нормальный код, который сам, без всяких проверок, сообщит нам об ошибках.
    В случае mysqli это
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    $link = mysqli_connect($host, $user, $pass, $db_name);
    $link->set_charset("utf8mb4");

    Здесь первая строчка отвечает как раз за информирование об ошибках

    Кроме того надо не забыть про ошибки РНР
    Во-первых, всегда в коде должно быть error_reporting(E_ALL);
    Плюс на домашнем компе ini_set('display_errors',1);, а на боевом - ini_set('display_errors',0);ini_set('log_errors',1);, и смотреть, соответственно, в логах.

    После этого переписываем запрос. Причем так, чтобы данные в БД всегда попадали отдельно от самого запроса. Это непреложное правило, которое надо соблюдать всегда.
    Для этого надо
    • Заменить все переменные в запросе на специальные маркеры, которые называются плейсхолдеры или параметры, а по сути - просто знаки вопроса
    • Подготовить запрос к исполнению с помощью функции prepare(). Эта функция принимает строку запроса и возвращает экземпляр специального класса stmt, с которым в дальнейшем и производятся все манипуляции
    • Привязать переменные к запросу.
    • Выполнить подготовленный ранее запрос с помощью с помощью execute()

    В mysqli это будет так
    $sql = "INSERT INTO `events` (`title`, `discription`, `date`, `img`) VALUES (?,?,?,?)";
    $stmt = $link->prepare($sql);
    $stmt->bind_param("sssss", $title, $discription, $date, $path);
    $stmt->execute();

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

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

    Но по-хорошему для работы с БД в РНР лучше использовать PDO, Тем более что там колупаться с bind_param не нужно, а можно сразу отправить все данные в execute

    Подключение
    $host = '127.0.0.1';
    $db   = 'test';
    $user = 'root';
    $pass = '';
    $port = "3306";
    $charset = 'utf8mb4';
    $options = [
        \PDO::ATTR_ERRMODE            => \PDO::ERRMODE_EXCEPTION,
        \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
        \PDO::ATTR_EMULATE_PREPARES   => false,
    ];
    $dsn = "mysql:host=$host;dbname=$db;charset=$charset;port=$port";
    $pdo = new \PDO($dsn, $user, $pass, $options);

    Здесь за информирование об ошибках отвечает параметр PDO::ERRMODE_EXCEPTION, а остальные просто для удобства/корректности.

    Выполнение запроса
    $sql = "INSERT INTO `events` (`title`, `discription`, `date`, `img`) VALUES (?,?,?,?)";
    $stmt = $link->prepare($sql);
    $stmt->execute([$title, $discription, $date, $path]);
    Ответ написан
    2 комментария
  • Каков алгоритм перехода от Ардуино-поделки к серии?

    gbg
    @gbg Куратор тега Arduino
    Любые ответы на любые вопросы
    По первому вопросу - да, это крайне желательно. Плюсом также идет возможность вписать плату в нужный габарит и конфигурацию корпуса, возможность выкинуть лишние детальки (вот вам нужен конвертер USB-Serial? А линейный источник питания? А разъем USB.?) и так далее. Зато нужна пачка фильтров по питанию (это же автомобиль), защита входов и выходов.

    По второму вопросу - java тащит за собой jre, а он довольно жирный, ему нужен жирный контроллер, который любит вкусно кушать электроэнергию. Кроме того, поведение и задержки программы на C++ довольно предсказуемы, на java - нужны дополнительные ухищрения для того, чтобы сборщик мусора не навестил вас внезапно.

    Можно дальше развивать тему, отметив, что в условиях жестко ограниченных ресурсов (сколько там RAM? 8 килобайт?) язык с ручным управлением ресурсами (C, C++) гораздо более предсказуем, нежели вся такая автоматическая и удобная жаба.

    Ну и еще - я за всю свою радиогубительскую практику (более 15 лет) ни разу не покупал ардуину - я сразу проектировал прототип и делал плату (сначала ЛУТом, потом заказывал на производстве, так как это качественней и не намного дольше + на производстве изготовят сразу десяток плат, которые не страшно запороть в процессе отладки) - это
    на порядки надежнее ковыряний в клубке проводов. Ну и некоторые девайсы с аналоговым трактом (анализатор спектра, анализатор миоактивности) в виде клубка просто не работают.
    Ответ написан
    2 комментария
  • Почему все чаще пользователи отвечают в комментах к вопросу?

    GavriKos
    @GavriKos
    Личное - я так делаю когда не уверен что это ответ И не разбираюсь в предметной области
    Ответ написан
    2 комментария
  • Почему все чаще пользователи отвечают в комментах к вопросу?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Делаю так тогда, когда не считаю написанное достойным ответа. Иногда вопрос слишком уж элементарен, иногда я больше подтолкнул человека в нужную сторону, чем дал конкретное решение.
    Ответ написан
    Комментировать
  • Зачем Python Django девелоперу нужно знать SQL?

    vabka
    @vabka
    Токсичный шарпист
    1. Чтобы писать эффективные запросы, которые будут нормально ложиться на индексы и быстро выполняться
    2. Чтобы избегать глупых ошибок, когда пишется запрос, который принципиально невозможно превратить в SQL
    3. Чтобы избегать подводных камней с ORM, таких как N+1 и (хз как называется - когда ORM выгружает все данные из базы, а потом обрабатывает их на стороне приложения)
    4. Чтобы не порождать дыры в безопасности.
    5. Чтобы писать запросы без ORM - иногда быстрее зайти в datagrip и ввести запрос там, чем писать одноразовый скрипт.

    ORM, имхо, нужна только для ускорения написания запросов и абстрагирования от синтаксиса конкретной СУБД, но не для замены SQL
    Ответ написан
    Комментировать
  • Django, хочу добавить в базу данных 2000 столбцов?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Django
    Седой и строгий
    Рано вам ещё за Django браться, вы явно не знаете Python.
    Ответ написан
    2 комментария
  • Как создать базу данных на Heroku?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Heroku
    Седой и строгий
    Даю совет: Читайте документацию, там всё расписано подробно и элементарно.
    Ответ написан
    5 комментариев
  • Как добавить только не пустые параметры в бд?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Начнем с того, что "if isset" не проверяет, "пустая ли переменная". Она только проверяет, было ли переменной присвоено какое-то значение.
    Что, в свою очередь, очень забавно смотрится после того как буквально строчкой выше каждой переменной уже было присвоено значение.
    Ну то есть это условие сработает, если в запросе вообще не было такого поля, но во-первых, мне кажется не это имелось в виду, а во-вторых, если поля не было, то уже при присвоении будет ошибка, и после этого делать isset уже как-то глупо.

    И, как правильно заметил Кирилл Николаевич, наверное имеется в виду размер строки с данными. Если он нулевой, то мы можем считать поле пустым. Плюс, как он опять же, правильно заметил, возможно имеет смысл отрезать концевые пробелы, правда непонятно, каким местом для этого регулярки.

    В общем, после такой эпичной борьбы с переменными, даже не знаю, стоит ли переходить к гибельному вопросу добавления в БД только не пустых значений. Сколько пользователей похапешечки на нем сложило голову и не смогли его осилить - не счесть. А из тех, кто смогли, потом многие начали заговариваться и слышать потусторонние голоса.
    Так что ты хорошенько подумай - а надо ли оно тебе вообще.

    В общем случае нам надо список полей, которые мы можем добавить в БД. Чтобы не колупаться с отдельными переменными. А дальше все просто - цикл, который проверяет на пустоту и формирует сам запрос плюс массив с данными для него.
    $fields = ['phrase','secret','custom1', ...];
    $conditions = [];
    $params = [];
    foreach($fields as $key) {
        if (strlen($val = trim(filter_input(INPUT_POST,$key)))) {
            $conditions[] = "`$key` =?";
            $params[] = $val;
        }
    }
    if ($params) {
        $sql = "INSERT INTO table SET ".implode(",",$conditions);
        $pdo->prepare($sql)->execute($params);
    }
    Ответ написан
    Комментировать
  • X64 и X86 это одно и тоже?

    Sanes
    @Sanes
    x86 это архитектура. x86_64 это 64 бита. Но обычно не заморачиваются, когда обсуждают разные архитектуры.
    32 бита обычно обозначают, как i386, i586 и т.д.
    Ответ написан
    Комментировать
  • Почему Nginx перенаправляет неизвестные субдомены на главный домен?

    ky0
    @ky0 Куратор тега Nginx
    Миллиардер, филантроп, патологический лгун
    Заведите серверный блок, который будет обрабатывать всё, для чего не нашлось соответствия в server_name других конфигов.
    Ответ написан
    3 комментария