• Какое правильное и универсальное решение по округлением в jinja2?

    gscraft
    @gscraft
    pcdesign, спасибо за уточнение, изначально понял вопрос как громоздкость приведенных фильтров и сомнительность вывода фильтрации в функцию. Если вас интересует округление до целого при необходимости, то, думаю, решить можно так:

    def smart_round(text: str, ndigits: int = 2) -> str:
        try:
            number = round(float(text), ndigits)
            if number == int(number):
                number = int(number)
            return str(number)
        except: # строка не является float / int
            return ''
  • Что то подтупливаю над занесением значений чекбоксов php?

    gscraft
    @gscraft
    FanatPHP, просто стараюсь учитывать, что человек только начал разбираться. А в примере смысла нет, тоже самое, только развернуто и с комментарием, что стоит-таки какие-то полезные действия с массивом выполнить, да и пример специально обрывается на die. Что касается нормализации-денормализации, тут много опыта надо, услышал о ней, может заинтересуется. Да и на практике бывает такое, что форму целесообразние запихнуть в JSON, отвечающим тут не ясно же, что там за проект и в чем смысл действий. Понадобится, например, поиск по этим полям, или связанность данных какая-то, необходимость раскладывания данных придет сама.
  • Что то подтупливаю над занесением значений чекбоксов php?

    gscraft
    @gscraft
    pillson, вот тут есть о чем подумать, если нужна такая денормализация данных, например, просто храните отклики пользователей без особой структуры, то JSON хороший выбор. $stringToDb = json_encode($values) (и наоборот всегда получите массив — json_decode($stringFromDb).
  • Что то подтупливаю над занесением значений чекбоксов php?

    gscraft
    @gscraft
    Человек делает первые шаги, все будет хорошо. Просто надо разобраться с программированием поплотнее. В деле PHP это часто случается, когда из HTML приходят в необходимость сохранить форму, например.

    Можно попробовать переложить вот так:
    echo '<pre>';
    var_dump($_POST);
    echo '</pre>';
    die;
    $values = array(); // к нам пришел массив значений, перекладываем в массив
    foreach($_POST['checkbox'] as $i => $value) {
         // тут желательно проверить и обработать данные, вдруг пользователь что-то подделал шутки ради?
        $values[$i] = $value;
    }

    И посмотреть, что получится (die — это преждевременный выход из сценария).
  • Как выложить сайт на beget Python Django?

    gscraft
    @gscraft
    m1 rvi, да необязательно, это и не прямой ответ, а совет. Всего доброго!
  • Как правильно хранить ключ шифрования для десктопных приложений?

    gscraft
    @gscraft
    wataru, это уже социальный фактор, увы, защиты от него вообще нет. С тем же успехом позвонят якобы из банка и человек вывалит все явки и пароли.
  • Как правильно хранить ключ шифрования для десктопных приложений?

    gscraft
    @gscraft
    В случае с Team Viewer защита ОС является "мастер-паролем"
  • Как выложить сайт на beget Python Django?

    gscraft
    @gscraft
    Выложил, но не работает? А что именно не работает? Проблема конфигурации, не запускается, сайт не виден в сети? Если Вы по инструкции https://beget.com/ru/articles/webapp_python — то я бы посоветовал не мучиться, перейти на VPS с полным контролем и развернуть по инструкциям Django.
  • Устарел ли Opengl ES?

    gscraft
    @gscraft
    MrHackerman, а для чего? Для мобильных приложений? Я бы посоветовал воспользоваться готовым движком. Тот же Godot Engine переезжает с ES на Vulkan в следующей версии, но разработчик от этого максимально изолирован. Если речь о прямом использовании OpenGL, то я бы посоветовал сразу перейти на Vulkan. Перспектив у OpenGL ES нет.
  • Как можно в c/c++ изменять значения ОЗУ?

    gscraft
    @gscraft
    Максим, есть смысл изложить задачу как можно обстоятельнее. Дать ответ "на деревню дедушке" сложно. Возможно Вам вообще не нужно такое решение. Я так же отмечу, этот путь не будет прост и может оказаться, что подготовки на данном уровне знаний не хватит. Вызовите пару вылетов из приложения и обнаружите тупик, например.
  • Изучения Larvel без ооп?

    gscraft
    @gscraft
    Vitsliputsli, все верно, но что делать человеку, лучше двигаться вперед. И ничего, если начнет со статических классов. Все будет зависеть от дальнейшего опыта. И в конечном счете хорошие практики на функциональном (или ином) программировании могут оказаться сложнее. Т.к. ООП все равно делает организацию программ проще в силу его большей абстрактности, предметной ориентированности и изоляции сущностей. Оно на то и ООП, что помогает проектировать. Другое дело, что подводных камней хватает. Например, сначала говорили — пусть программа будет иерархией классов, потом в моду вошли фабрики фабрик, теперь говорят — разорвите связи, пишите интерфейсы и инъекции. И то, спорно по сей день, что будет лучшей организацией в той или иной ситуации.
  • Создание apk установщика с помощью buildozer, kivy и python?

    gscraft
    @gscraft
    А что с VirtualBox? Из виртуальной машины тоже лезет в каталоги Windows?
  • Как лучше реализовать?

    gscraft
    @gscraft
    Тут может быть много вариантов. Например, может быть смысл в том, чтобы выделить общую сущность отделов в одну таблицу, а их различия подгружать по необходимости: department, department_type_a, department_type_b, хотя возможно все уляжется в одну таблицу или будет реализовано в виде NoSQL-полей (уже широко поддерживаемый JSON, например). Получится, что сотрудники относятся к отделам вообще, но несколько усложнит работу с отделами. И даже при наличии разных сущностей отделов Вы можете реализовать связь с ними третьей таблицей, department_employee, перенеся тип и флаг первичности туда.
  • Почему не работает валидатор Yii2?

    gscraft
    @gscraft
    Дмитрий, почему же, вполне посоветую. А еще посоветую не использовать гроб Yii2 никогда, при всей любви к нему. И никогда не писать вручную велосипед, а развернуть готовый сервис авторизации. И вообще, не мучиться, а перейти на ASP .NET Core / Kestrel.

    Вот обожаю такие комментарии знатоков паттернов и подходов. Помилуйте, человек пишет что получится, и вполне может в контроллере хоть крейсер развернуть. И плюнуть на Yii, уложить свой сайт в один PHP файл. Мир не пострадает, опыт получит. А своими руками больше авторизации для визитки ничего не слепит.

    А писать можно скромнее и не шуметь про документацию с кучей восклицательных знаков. Может кому-то и захочется зайти в пропиаренный выше блог.
  • Нужно ли проверка INSERT, UPDATE, DELETE?

    gscraft
    @gscraft
    FanatPHP, бессмысленное пояснение. «Пользовательские данные» как сущность вполне определенное и конкретное понятие. Это точка. И можно добавить, что к ним относится и попытка взлома, на которую, в свою очередь, программист может быть и не в силах повлиять (не допустить ошибок, но потерпеть крах).
  • Нужно ли проверка INSERT, UPDATE, DELETE?

    gscraft
    @gscraft
    FanatPHP, попробуйте в целое число записать строку или превысить допустимые диапазоны.
  • Почему не работает валидатор Yii2?

    gscraft
    @gscraft
    В общем и целом трудно что-либо сказать. Повторный пароль можно проверить отдельно, в контроллере, остальное штатным образом в модели User. Да, я ошибся, валидатор не должен ничего возвращать. Кстати, почему $user = new Setting(); а не $settings = new Settings? И не понадобится "костыль" $dbUser.
  • Нужно ли проверка INSERT, UPDATE, DELETE?

    gscraft
    @gscraft
    Нужно для кого? Вам? База данных не выполнит запрос в двух случаях: неверные данные пользователя (и их необходимо проверить перед записью в базу) или системная исключительная ситуация, вопрос уже администрирования СУБД. О первом, видимо, пользователя стоит проинформировать, о втором — уведомить скорее себя.
  • Почему не работает валидатор Yii2?

    gscraft
    @gscraft
    Владислав, пользовательский валидатор должен вернуть true / false вместе с добавлением ошибки. Не думаю, что стоит перезаписывать пароль и вообще выводить пользователю старый пароль, его стоит захешировать в одностороннем порядке. И затем обработать ввод / отсутствие нового пароля, что можно сделать разными способами, в том числе в beforeValidate или в контроллере, например: 1) загружаете модель пользователя $user = User::findOne, 2) заменяете данными формы $user->load (если модель формы отдельная, то $user->setAttributes, т.к. load берет вложенную структуру данных, 3) если пользователь не новый, и пароль пуст — заменяете с getOldAttribute, в противном случае сгенерируете хэш для нового пароля — для валидатора пароль будет заполнен.

    Так же, есть смысл избежать = new Setting(); дважды. Вы так и так загружаете данные пользователя (не identity ли?), так и так создаете форму Setting. Делаете это в шапке обработчика, проверяете наличие POST, обновляете, что нужно, и возвращайте тот же Setting.