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

    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.
    Ответ написан
    Комментировать
  • Права для локальной разработки должны быть 777?

    Adamos
    @Adamos
    WSL зачеркиваем, для Debian все решается элементарно:
    1. Заводим пользователя без прав админа, под которым работаем над сайтом.
    2. Лезем в настройки веб-сервера и указываем там того же пользователя и его группу вместо www-data.
    Файлы сайта, соответственно, не в /var/www, а в домашней папке этого пользователя.
    И никаких проблем с правами, хоть 700 ставь.
    Ответ написан
    Комментировать
  • Какую формулу использовать?

    Adamos
    @Adamos
    Деление 17 монет на троих:
    15 монет делим на троих поровну, 2 монеты отдаем первому и второму из скидывавшихся.
    Не идеально справедливо, зато без бесконечных дробей, которые иначе неизбежны.
    При неравных долях сортируем скидывавшихся так, чтобы раньше получал внесший большую долю.
    Собственно, при этом должна восстановиться исходная картина - как же так, скидывались поровну, а в сумме 17 ;)
    Ответ написан
    Комментировать