• Как можно улучшить код?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как можно улучшить код?

    - отформатировать по какому-нибудь стандарту, чтобы хотя бы строчки не гуляли влево-вправо.
    - пользоваться тернарным оператором вместо if когда это имеет смысл. На мой взгляд, d = n < 0 ? -n : n выглядит куда лучше семистрочного if/else.
    - не дублировать код когда этого легко избежать:
    if(n<0) {
        cout<<"-";
    }


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

    vabka
    @vabka
    Токсичный шарпист
    CORS-это не сайт, а браузер твой ругается. Выставляй корректные CORS-заголовки
    Ответ написан
    Комментировать
  • Как запустить сервер nodejs без порта?

    vabka
    @vabka Куратор тега Веб-разработка
    Токсичный шарпист
    но не будет ли возникать конфликтов в работе клиента и сервера,

    Не должно. Просто разруливай по путям - что к бэку должно идти, а что на статику.

    А чтобы "без порта" надо запускать на 80 и 443 порте.
    Но если на этой же машине nginx стоит, то будет конфликт.
    Ответ написан
    Комментировать
  • Как попасть в IT в 15 лет?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Начните с сайтов для родителей, родственников, друзей родителей, своих друзей. Если делать хорошо, то заработает сарафанное радио, позволит наработать первый реальный опыт и принесёт какие-то деньги.
    Ответ написан
    1 комментарий
  • Пару вопросов по использованию докера в продакшене?

    Griboks
    @Griboks
    Использовать докер в продакшене - нормальное решение?

    Да, но есть один нюанс... Судя по вашему вопросу, вы его точно не учли.

    Не упустил ли я какие-то важные команды, которые не используются при разработке, но нужны перед сборкой продакшена?

    Выкидываете build и git, создаёте docker registry, предварительно собираете образы (без гита, только полезные файлы в slim образе), пушите их в реестр, на проде прописываете нужные образы нужных версий. Поднимаете через compose + устанавливаете restart = unless stopped.

    после чего память на сервере закончилась

    Выкидываете git, делаете docker system prune раз в месяц, ставите в настройках демона ротацию логов.

    Автоматический бекап базы данных - ответственность самого сервиса (в коде делать дамп), докера (использовать какой-то image для бекапов) или сервера (непосредственно на сервере настроить крон)?

    Docker image не используется для бэкапов, потому что он не может изменять свои файлы. Файлы изменяются в контейнерах, volume или маунтах.
    Поэтому бэкап - это задача сервера. Только бэкапить надо не рядом с базой, а на другой сервер.

    Как не терять данные из бд при перезапусках контейнера?

    Контейнер не теряет файлы при перезапуске. Скорее всего, вы его тупо удаляете, а затем пересоздаёте.

    Но тк приложение работает в докере, я не могу выполнить nano app.logs для просмотра логов.

    Писать логи в другое место/ docker attach / docker cp / экспорт логов и метрик в сервис мониторинга.

    p.s.
    Вот вам линтер для обучения.
    Ответ написан
    Комментировать
  • Пару вопросов по использованию докера в продакшене?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    1. Использовать докер в продакшене - нормальное решение?

    Нормальное.
    3. У меня был сервер на 50 гигов

    Докер хранит все слои, образы и логи, периодически, необходимо чистить не используемые образы docker system prune.
    4. Автоматический бекап базы данных

    Я бы cron использовал для этого.
    5. Как не терять данные из бд при перезапусках контейнера?

    Не использовал, но слышал много хорошего про Docker volumes.
    6. Node.js приложение само пишет нужные мне логи и кладет в корень проекта.

    Docker volumes.
    Ответ написан
    Комментировать
  • Почему Response.status это значение, а status = { Response } это ссылка на Response?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    Деструкция выглядит так: const { status } = result;
    Вы же создаёте переменную status и в неё записываете объект {result: result}.
    Поэтому возвращает ваша функция вот такую конструкцию:
    {
      data: ...,
      status: {
        result: result,
      }
    }
    Ответ написан
    Комментировать
  • Правильно ли понимаю работу ссылок в С++?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Это называется передача по ссылке/передача по значению. С амперсантом, передается ссылка на переменную. Иначе - копия значения переменной. Если вы будете менять копию значения, ничего вне функции не изменится, ведь вы копию меняете. А если будете менять значение ссылки, вы будете менять значение той же самой переменной.
    Ответ написан
    Комментировать
  • Не приходит в голову алгоритм лучше. Как сделать лучше?

    Lynn
    @Lynn
    nginx, js, css
    Откройте для себя циклы.
    https://doka.guide/js/loop/
    for (let i = 0; i < clickCount - 1; i++) {
        elementstypeWorkFirst[i].innerHTML = '';
    }
    Ответ написан
    Комментировать
  • Почему нельзя использовать std::function как аргумет шаблонной функции?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Потому что лямбда не ялвяется std::function. Компилятор, вообще говоря, может лямбду привести к типу std::function, но не в вашем случае. Вам надо, например, самим преобразовать лямбду в std::function:
    std::function<bool(int, int)> comp = [](int left, int right)
      {
        return left < right;
      };
      Sort(vec, comp);


    Сам компилятор тут это сделать не может, потому что ему тип к которму приводить-то неизвестен - он зависит от параметра шаблона T.

    Можно, еще, например, указать компилятору параметры шаблона, тогда все скомпилируется:
    Sort<int>(vec, [](int left, int right)
      {
        return left < right;
      });


    Но лучший вариант - не использовать std::function в шаблоне. Просто используйте какой-то typename U, у которого вы продполагаете существует operator(int, int). Если туда передать не function и не лябмду, оно не скомпилится:

    template <typename T, typename U>
    void Sort(std::vector<T>& vector, U comparison) {
        // Используете comparison, как-будто это std::function:
        if (comparison(1, 1)) return;
    };
    
    
    int main()
    {
      std::vector<int> vec = { 1, 2, 3, 4, 5, 7, 6, 9 ,8 };
    
      Sort(vec, [](int left, int right) -> bool
      {
        return left < right;
      });
        return 0;
    }
    Ответ написан
    Комментировать
  • Что и почему лучше подключить в C++? math.h или cmath? stdio.h или cstdio?

    @res2001
    Developer, ex-admin
    В С++ используют вариант где не указывают расширение .h в include. С расширением это для исходников на Си.
    Впрочем, как вы верно заметили, в плюсах это то же работает. Обычно внутри <cxxxx> просто делается #include <xxxx.h>
    Ответ написан
    Комментировать
  • Как справляться с зависимыми задачами?

    @d-stream
    Готовые решения - не подаю, но...
    Возможно это вначале покажется чутка избыточным, но по размышлению - нет:

    master == прод
    dev == ветка стабильной разработки, где живут более-менее целостные фичи
    feature_xx == опять же целостная, самостоятельная фича, привносящая осмысленный функционал и состоящая возможно из множества задач

    фичи отращиваются и возвращаются в ветку dev и их можно даже на уровне ветки протестировать
    в какой-то момент от ветки dev отращивается ветка release (по-сути релиз-кандидат) и потом по выпуску (релизу) вливается в master и dev
    go to 1

    при таком подходе в dev живёт достаточно стабильное решение, а ветках feature - конкретные фичи, которые к моменту влития в dev - в общем-то тоже стабильны и функциональны.

    ну и собственно релизный цикл получает некую "асинхронность" относительно цикла разработки:
    - захотел релиз-менеджер к юбилею фирмы выпустить релиз - пожалуйста - в dev есть пачка фич
    - накопилось осмысленное кол-во фич - вперёд в релиз
    - оттестирована конкретная ожидаемая фича - в релиз (ну и попутно менее значимые)

    сорри за слегка вольный пересказ по-сути большинства моделей ветвления гита, гитлаба, атлассиана и др.)
    Ответ написан
    Комментировать
  • Как ОС загружается с разделом boot на софтверном рэйде?

    @pfg21
    ex-турист
    grub классически использует систему "MBR gap".
    первый кластер содержит классический boot.img размером 442 байта, в который ничего "большого" не впихнешь.
    поэтому после идет "разрыв" между первым кластером и началом первого раздела (хватает пары-тройки мегабайт) в который вписывается core.img бинарный код, динамически компилируемый грубом во время grub-install из своих модулей, для загрузки с текущего набора фс и разделов.

    т.е. в boot.img содержится только загрузчик core.img.
    а размер core.img уже не ограничен 442 байтами и может многое чего хитрого загрузить.

    если у тебя gpt, то там вообще спец.раздел с загрузчиком, туда много чего умного впихнуть можно.
    Ответ написан
    6 комментариев
  • Как в С++ проверить double на целочисленность?

    @vanyamba-electronics
    При обработке вещественных чисел следует определиться, которая точность вас устраивает в данном случае.
    В идеале 1.0 - это явно целочисленная дробь, но на практике возникает вопрос: а 0.99999999 - это достаточное приближение, чтобы принимать это число за 1.0?
    Поэтому функция должна иметь параметр точности:
    bool is_integer(double val, double precision = 0.000005)
    {
        return abs(val - round(val)) < precision;
    }
    Ответ написан
    2 комментария
  • Что у меня за направление и как в нем учиться?

    vabka
    @vabka
    Токсичный шарпист
    Если тебя интересует непосредственно разработка всяких проксей, vpn, и прошивок для сетевого оборудования, то это:
    1. Сетевое программирование
    2. Системное программирование
    Ответ написан
    1 комментарий
  • Как склеить байты правильно?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    char ... c=0xA1

    здесь нужно использовать unsigned char, иначе после знакового расширения получишь гарантированно отрицательный результат

    Как склеить байты правильно?

    чтобы склеить байты правильно, нужно знать, какой порядок байт принят в этом файле. См. big endian, little endian.
    Ответ написан
    1 комментарий
  • Почему Object.__proto__ ссылается на Function.prototype, а Function.prototype.__proto__ на Object.prototype?

    Alexandroppolus
    @Alexandroppolus
    кодир
    Object - это функция. У любой функции __proto__ ссылается на тот же объект, что и Function.prototype, потому что, условно говоря, каждая функция создана конструктором Function. Под капотом, разумеется.

    Function.prototype - это обычный плоский объект, созданный (опять же, условно говоря), конструктором Object. Соответственно, аналогично первому пункту, его __proto__ смотрит на Object.prototype
    Ответ написан
    Комментировать
  • Отсутствуют /dev/video* и /dev/audio*. Как и чем их заменить?

    leahch
    @leahch Куратор тега Linux
    3D специалист. Dолго, Dорого, Dерьмово.
    /dev/video* - устройства захвата видео подсистемы video4linux (v4l), обычно появляются в системе, если есть карточки или устройства видеозахвата, такие, как usb-камеры например.
    /dev/audio* - устаревшие устройсва подсистемы OSS (Open Sound System), отстутствуют в современных системах примерно так лет 10 минимум. Альтернатива /dev/snd/* устройств ALSA, например...
    Ответ написан
    Комментировать