Задать вопрос
  • Как в Ubuntu указать модель клавиатуры?

    Adamos
    @Adamos
    adamos@Asfodel:~$ cat /etc/default/keyboard 
    # Check /usr/share/doc/keyboard-configuration/README.Debian for
    # documentation on what to do after having modified this file.
    
    # The following variables describe your keyboard and can have the same
    # values as the XkbModel, XkbLayout, XkbVariant and XkbOptions options
    # in /etc/X11/xorg.conf.
    
    XKBMODEL="pc105"
    XKBLAYOUT="us,ru"
    XKBVARIANT=","
    XKBOPTIONS="grp:alt_shift_toggle,terminate:ctrl_alt_bksp,grp_led:scroll"
    
    # If you don't want to use the XKB layout on the console, you can
    # specify an alternative keymap.  Make sure it will be accessible
    # before /usr is mounted.
    # KMAP=/etc/console-setup/defkeymap.kmap.gz
    BACKSPACE="guess"

    Есть подозрение, что любые настройки в конце концов упрутся куда-то сюда.
    Ответ написан
    2 комментария
  • Как правильно создать класс в laravel-data?

    Adamos
    @Adamos
    Ответ написан
    Комментировать
  • Какой лучший вариант решения такой задачи?

    Adamos
    @Adamos
    Вздор это - насчет буквосочетаний. Слово ЖДЬЯ, например, вам вряд ли пригодится.
    Для русских слов с формами на хрен не нужны никакие API, нужен словарь Зализняка, и только.
    Ответ написан
  • Существует ли api со словами из словаря Даля или словами из других больших словарей?

    Adamos
    @Adamos
    Обычно про словарь Даля говорят только те, кто ни разу его не открывал.
    Он устарел, внезапно. На пару веков.
    Современный русский - это Ожегов и Шведова, например.
    Словарь для Lingvo гуглится без проблем.
    Ответ написан
    1 комментарий
  • Как решить проблемы при копировании сайта на хостинг для разработки?

    Adamos
    @Adamos
    .htaccess в корне сайта вполне может быть настроен на редирект с HTTP на HTTPS, например.
    Вот и редиректит вас с локалки на боевой.
    Пропишите ему на редиректы исключение типа
    RewriteCond %{HTTP_HOST} !^192\.168\.100\.254
    .htaccess с такой добавкой можно залить и на боевой сайт, ему она не помешает.
    Ответ написан
    Комментировать
  • Можно ли с нуля обучится программированию, используя только интернет и не тратив деньги?

    Adamos
    @Adamos
    Можно ли с нуля обучится программированию, используя только интернет и не тратив деньги?

    Я, научившись программировать с нуля, не потратив на это обучение ни копейки и сделав это еще до появления в России интернета, свидетельствую: можно.

    нужны люди, которым я смогу задать пару вопросов.

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

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

    Adamos
    @Adamos
    Господа администрация!
    С какого перепуга я оказался "экспертом по тегу Kali" и как вообще можно клеить человеку такие позорные ярлыки коварно, исподтишка, даже без уведомления?
    ;)
    Ответ написан
    Комментировать
  • Правильно ли в C++ использовать директиву препроцессора define?

    Adamos
    @Adamos
    За такое использование #define надо клавиатуру отбирать.
    Определение макросов только для того, чтобы не написать лишнюю букву, и насрать, как об это будет ломать глаза читающий - классический образец говнокода.

    #define - определение переменных времени компиляции. Чтобы просто заменить какую-то величину во всем коде разом - есть константы. Чтобы сократить рутинные повторяющиеся конструкции - свой класс в своем неймспейсе.
    #define же позволяет:
    - писать программу, которая будет собираться в версии Pro и версии Lite (конкретные блоки кода оборачиваются в #ifdef PRO_VERSION)
    - писать кроссплатформенный код, разветвив его по #ifdef __WIN32__ ... #else
    и тому подобные возможности управления компиляцией.
    Использовать этот механизм для банальных макросов - глупо и опасно. Хотя бы потому, что #define в любом месте кода может переопределить ваше определение совершенно другим значением.
    Тем более, что макросы только мешают программисту и IDE понять, что происходит в конкретном месте кода.

    Использование #define в библиотеках может быть оправдано, но и там лучше найти способ без него обойтись.
    Например, в wxWidgets привязка обработчиков событий со временем прошла вот такую эволюцию:
    // В начале, когда Земля была безвидна и пуста, и все ковырялось через макросы
    // #define BEGIN_EVENT_TABLE(a,b) wxBEGIN_EVENT_TABLE(a,b)
    // #define EVT_PAINT(func) wx__DECLARE_EVT0(wxEVT_PAINT, wxPaintEventHandler(func))
    BEGIN_EVENT_TABLE(wxImagePanel, wxPanel)
    EVT_PAINT(wxImagePanel::paintEvent)
    END_EVENT_TABLE()
    
    // Ближе к цивилизации, макросы еще не вымерли
    // #define wxPaintEventHandler(func) wxEVENT_HANDLER_CAST(wxPaintEventFunction, func)
    Connect(wxEVT_PAINT, wxPaintEventHandler(paintEvent));
    
    // А что, сразу вот так нельзя было? 
    // Bind - метод класса, wxEVT_PAINT - константа, никакой магии...
    Bind(wxEVT_PAINT, &wxImagePanel::paintEvent, this);
    Ответ написан
    Комментировать
  • В Excel строки в столбец?

    Adamos
    @Adamos
    XLS -> CSV, регулярка, CSV -> XLS (лучше бы -> SQL, конечно).
    Ответ написан
    Комментировать
  • Какой линукс выбрать дата инженеру?

    Adamos
    @Adamos
    Поиграться в виртуалке, побеситься на тормоза.
    Поставить в дуалбут Убунту, побеситься на экспериментальный десктоп.
    Сменить ее на Минт и успокоиться в нормальном рабочем окружении.
    Скорее всего, так.
    Я предпочитаю Xubuntu, но ее все-таки надо под себя подпиливать.
    Собственно, разницы-то в дистрибутивах для "инженера", который не собирается в них копаться, практически никакой. Берешь то, чем пользуется побольше народу, вот и весь выбор.
    Ответ написан
    Комментировать
  • Как правильнее организовать код калькулятора?

    Adamos
    @Adamos
    const prices = [
      { diameter: 40, brick: 25, concrete: 30 },
      { diameter: 50, brick: 25, concrete: 30 },
      { diameter: 60, brick: 25, concrete: 30 },
    ];
    const realDiameter = 55;
    const material = 'brick';
    let price = 0;
    for(let n = 0; n < prices.length; ++n) {
      if(realDiameter < prices[n].diameter) {
        break;
      }
      price = prices[n][material];
    }
    Ответ написан
    1 комментарий
  • Как вывести больше 100 номенклатур посредством curl в php?

    Adamos
    @Adamos
    Рабочий код:
    public function getCards2024(): array
        {
            $cards = [];
            $limit = 100;
            $cursor = [
                'limit' => $limit
            ];
            do {
                $res = $this->curlQuery(
                    self::API_SUPPLIERS,
                    self::METHOD_POST,
                    'content/v2/get/cards/list',
                    [
                        'settings' => [
                            'sort' => [
                                'ascending' => false
                            ],
                            'cursor' => $cursor,
                            'filter' => ['withPhoto' => -1]
                        ]
                    ]
                );
                if(!is_array($res) || !isset($res['cards'])) {
                    throw new \ErrorException('WB returns wrong answer');
                }
                $cards = array_merge($cards, $res['cards']);
                $cursor['updatedAt'] = $res['cursor']['updatedAt'];
                $cursor['nmID'] = $res['cursor']['nmID'];
            } while($res['cursor']['total'] >= $limit);
            return $cards;
        }
    Ответ написан
    Комментировать
  • Какая оптимальная структура хранения кастомных классов в Laravel 11?

    Adamos
    @Adamos
    Ну, раз гуру говорят, что best practices нет, посоветую свою just practice.
    Вообще не класть в app ничего сверх того, что там держит фреймворк.
    Создать свою папку для своих модулей, внутри них создать свои классы (можно повторить иерархию app).
    Вопроса, куда девать то, что в эту иерархию не вписывается, уже не возникает - создаешь папку с названием tools, например, и сваливаешь эти тулзы туда ;)

    Такой вариант навеян подходом OctoberCMS, где весь РНР-код разработчика ложится в папку plugins/{developer}/{module}, в принципе не смешиваясь с остальной системой.
    Как следствие, в следующий проект этот код переносится куда легче.
    Ответ написан
    2 комментария
  • Какие есть варианты для программной консолидации excel?

    Adamos
    @Adamos
    В задачах обработки данных место офисных форматов - только для импорта в БД и экспорта из нее.
    Чтобы свободно решать эти "проблемы" на SQL и веб-стеке, не парясь со сборкой программ на каждый чих или, тем более, с макросами и вундервафлями офиса.
    Заодно и переход с MSO на LO или другой пакет пройдет совершенно безболезненно.
    А в перспективе - задачи "девочек" в принципе будут решаться на портале, а не в офисе.
    Ответ написан
  • Почему ломается передача по ссылке в foreach с указанием оператора опциональной последовательности для массива?

    Adamos
    @Adamos
    Потому что вычисление $a ?? [] имеет результатом копию массива, на нее и ссылается переменная цикла. Оригинальный массив в цикл вообще не попадает.
    Ответ написан
    Комментировать
  • Как правильно обучаться в начале пути?

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

    "Насчёт паттернов, принципа SOLID и подобных штук": для их изучения необходим опыт, хотя бы говнокодинга, и точка приложения, хотя бы тот же собственный говнокод, в котором груда классов перепутана между собой. Разгребание этой груды позволит применить те принципы на практике, а без практики их изучать бесполезно вовсе.
    Ответ написан
  • Как правильно использовать Docker в Ubuntu?

    Adamos
    @Adamos
    Судя по нику, стоит посмотреть на laradock.
    Никакие панели ему не требуются, файлы настроек правятся в любимом файл-менеджере любимым редактором, а уж команды запустить-перезапустить, если даже их не удается запомнить, можно в скрипт записать, в конце концов, и запускать из того же файл-менеджера...
    Ответ написан
    Комментировать
  • Как создать свой образ Linux для размноживания на других АРМ?

    Adamos
    @Adamos
    чтобы не делать такую процедуру вновь

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

    Adamos
    @Adamos
    Недавно, делая импорт с такими же проблемами, просто написал пару функций и применял их к каждому такому полю:
    private function makeLowIdList($array)
        {
            return array_flip(array_map(fn($value) => mb_convert_case($value, MB_CASE_LOWER), $array));
        }
    
        private function getId($idList, $title, $label)
        {
            $lowTitle = mb_convert_case($title, MB_CASE_LOWER);
            if(!array_key_exists($lowTitle, $idList)) {
                throw new Exception('wrong ' . $label . ': ' . $title);
            }
            return $idList[$lowTitle];
        }
    
        public function import($data) 
        {
            $payerIds = $this->makeLowIdList(Payer::getTitles());
            foreach(...) {
                try {
                        ...
                        $payerId = $this->getId($payerIds, $row['payer'], $row['orderNumber'] . ' payer');
                        ...
                } catch(Exception $e) {
                    $error = $e->getMessage();
                    if(!in_array($error, $errors)) {
                        $errors[] = $error;
                    }
                }
            }
            return $errors;
        }
    Ответ написан
    Комментировать
  • Как переобразовать string в const unsigned char* в C++?

    Adamos
    @Adamos
    Вообще-то для сравнения std::string с C-строкой лучше не вытаскивать указатели из string, а использовать ее std::string::compare.
    Ответ написан
    Комментировать