• Как можно перебирать слова в C++?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Раз у вас во вводе коды каждого символа разделены пробелами, то все просто. Заведите в программе map<wstring, wchar> и где-то в начале напишите 33 строчки вида:
    dict[L"•−"] = L'А';

    Потом входную строку разбейте на части по проблелам. Руками, циклом. Указатель-индекс будет указывать на первый необработанный символ. Найдите первый пробел или конец строки начиная с этой позиции. Кусок между двумя позициями - это текущий код. Его с помощью map'а выше переводите в символ. Сдвигайте индекс первого необработанного символа на позицию после пробела. Ну и аккуратно смотрите, если первый необработанный - пробел, то это пробел между словами - его как есть и выводите, сдвигая индекс необработанного символа на 1.
    Ответ написан
  • Почему нужно гуглить на английском?

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

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

    Во-вторых, на такие вопросы в интернетах чудовищное количество ответов, в основном оплаченных. Поэтому, когда вам будут настойчиво советовать пить обычный компливит, вспомните, что обычный ундевит от него отличается только ценой - раз в десять, правда... Ну, и найти его в аптеках труднее, особенно на витрине - там как раз красивые коробочки, прославленные телевизором.
    А так - попить витамины пару раз в год, для профилактики, никому еще не вредило. Но надеяться, что они дадут вам способности, которых у вас нет - как минимум наивно. Они разве что спасут от депрессии, хронической усталости и прочих состояний, граничащих с нерабочим. Подстегивать чем-то здоровый организм - это брать взаймы у собственного будущего. Очень не советую.
    Ответ написан
    8 комментариев
  • Как вы используете git при разработке в одиночку?

    Adamos
    @Adamos
    Для себя одного git, как мне кажется, нужен только как "машина времени" и "обратный роадмап".
    То есть, чтобы иметь возможность посмотреть более ранний вариант кода и чтобы в потоке коммитов найти, когда были какие-то конкретные изменения.
    По большому счету, ничего, кроме коммитов в мастер, тут и не требуется. Разве что желательны мелкие коммиты с осмысленным написанием изменений, а не куски того, о чем сам не вспомнишь через неделю.
    Ответ написан
    6 комментариев
  • Есть апп, задающий ребёнку развивающие задачки, а в случае успешного решения задачки ставящий мультик с ютуба?

    Adamos
    @Adamos
    Ваш "компромисс" не решает проблему, а обостряет ее. Решая задачки ради мультиков, ребенок их возненавидит (задачи, а не мультики). Вы ее просто превращаете в крысу, которой нужно давить на рычажок, чтобы стимулировать центр удовольствия в мозгу.

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

    Моей сейчас семь, мультики любит, но без фанатизма. Мы успешно прошли все подшивки "Школы семи гномов", рекомендую. Из развивающих игрушек использовали разве что GComprix, и то очень умеренно. Зато настольных игр у нее полный шкаф. Для вашего возраста уже кое-что можно брать - "Доббль", например.

    В четыре года мы взяли букварь, и дочь читала по странице каждый вечер. Потом - мы читаем сказку на ночь. До сих пор последний час перед сном - час чтения. Сначала дочь, потом мы. К семи годам читает бегло, с выражением, а главное - с удовольствием. Школьные уроки - в охотку и с интересом.

    Нельзя приставить к ребенку автомат и рассчитывать, что он будет развиваться. Ничего так не выйдет. Воспитание такого ребенка, каким хочешь его видеть - это труд, ежедневный и упорный. Если же вам всего лишь хочется, чтобы ребенок не мешал - ну, это-то устроить несложно. Сложности будут потом.
    Ответ написан
    6 комментариев
  • Что лучше использовать веб-разработчику: Linux Mint или Ubuntu?

    Adamos
    @Adamos
    Вы задаете вопрос, который ежемесячно обсасывается на Тостере вдоль и поперек.
    Значит, привычки гуглить и навыка читать нагугленное нет.
    Следовательно, Линукс противопоказан. Dixi.
    Ответ написан
    2 комментария
  • На чём написан язык программирования C?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Учтите, что язык программирования - это просто набор спецификаций и правил. Он написан на английском языке.

    Если же вас интересует на чем запрограммированы компиляторы языка С, то самые популярные нынче развивающиеся компиляторы написаны на C и C++ соответственно:
    gcc: https://github.com/gcc-mirror/gcc
    clang: https://github.com/llvm/llvm-project/tree/main/clang

    Вы спросите, а как компилятор языка Си написали на самом Си? Ответ прост - первые компиляторы были написаны на ассемблере. Они были очень простыми и тупыми, возможно не умели понимать все тонкости языка. Когда появился достаточно работающий компилятор с минимальным набором функций, можно было переписать его на Cи и скомпилировать первым компилятором. После этого стало можно компилировать компилятор на Си самим собой.

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

    А так, наверно, есть куча неподдерживаемых устаревших компиляторов Си на всевозможных языках.
    Ответ написан
    2 комментария
  • Как убрать действие preventDefault у ссылок в подмени?

    Lapita12
    @Lapita12
    Тесты, тесты?
    Чтобы убрать e.preventDefault() для ссылок в подменю, вам нужно добавить проверку на target с помощью if в теле функции handlerItem(). Ниже приведен измененный код:
    document.addEventListener('DOMContentLoaded', () => {
      const submenuItem = document.querySelectorAll(".header .menu-item-has-children");
      const menuBody = document.querySelector(".sub-menu");
    
      submenuItem.forEach((item) => {
        item.addEventListener('click', handlerItem);
    
        // слушаем клик вне меню
        document.addEventListener("click", function (e) {
          const target = e.target;
          const its_menu = target == menuBody || menuBody.contains(target);
          const its_btnMenu = target == menuBody;
          const menu_is_active = item.classList.contains("--show");
    
          if (!its_menu && !its_btnMenu && menu_is_active) {
            item.classList.toggle("--show");
          }
        });
    
        // слушаем скролл
        document.addEventListener("scroll", function () {
          //убираем класс если произошел скролл
          item.classList.remove("--show");
        });
      });
    
      function handlerItem(e) {
        if (e.target.classList.contains('sub-menu-link') || e.target.closest('.sub-menu-link')) {
          // если нажата ссылка в подменю, то предотвращаем действие по умолчанию только для нее
          return;
        }
    
        e.preventDefault();
        e.stopPropagation();
    
        this.classList.toggle("--show");
      }
    });


    Я добавил проверку на класс sub-menu-link для e.target и его ближайшего родителя с помощью метода closest(). Если элемент, на который был клик, имеет класс sub-menu-link или является его потомком, тогда e.preventDefault() не выполняется и действие по умолчанию будет выполнено.
    Ответ написан
    Комментировать
  • Почему выводятся не те символы, которые прописаны в коде?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    wcout << endl << "Результат: " << encrypt(s);

    ты потерял L перед "Результат" и выводишь в wcout обычную строку.

    А перед этим выводишь в cout. Приведи всё к выводу в wcout.

    Стандарт C++ об этом говорит вот что:
    Mixing operations on corresponding wide- and narrow-character streams follows the same semantics as mixing such operations on FILEs, as specified in the C standard library.

    А стандарт С в свою очередь говорит вот что (C11 7.21.2:4):

    Each stream has an orientation. After a stream is associated with an external file, but
    before any operations are performed on it, the stream is without orientation. Once a wide
    character input/output function has been applied to a stream without orientation, the
    stream becomes a wide-oriented stream. Similarly, once a byte input/output function has
    been applied to a stream without orientation, the stream becomes a byte-oriented stream.
    Only a call to the freopen function or the fwide function can otherwise alter the
    orientation of a stream. (A successful call to freopen removes any orientation.)

    Byte input/output functions shall not be applied to a wide-oriented stream and wide
    character input/output functions shall not be applied to a byte-oriented stream.
    Ответ написан
    7 комментариев
  • Нужен ли антивирус на linux server?

    @dronmaxman
    VoIP Administrator
    Тоже самое, ни разу не пригодился. Было пару пробитых серверов, ради интереса гонял на них разные антивирусы и скрипты, пытался найти трояна или зараженный файл - все глухо.

    Для себя сделал вывод, что это бестолковщина для linux сервера.

    По логике, антивирус в основном сканирует скачиваемые пользователем файлы и блокирует потенциально опасные действия пользователей. Но непосредственно на самом сервере пользователь не работает, а только запрашивает с него данные, а следовательно никаких привилегий на сервере не имеет.

    Вот, что реально помогает, это правильно настроенный firewall и fail2ban. Так же хорошей практикой является запускать процессы которые слушают порты от безправных учеток. В Fail2ban уже заложено множество шаблонов под разные сервисы, их достаточно просто включить.

    Универсальной статьи нет, так как настройка зависит от ПО которое крутиться на сервере.
    Есть общие рекомендации:
    - настроить firewall, открывать только нужные порты
    - для SSH использовать ключи, изменить порт (например 2324), ограничить доступ с определенных IP
    - запретить вход от root на сервер по паролю
    - не использовать имена учетных записей которые попадают в перебор (типа admin, super, cisco и т.д.)
    - запускать сервисы от непривилегированных учетных записей
    - настроить бекапы
    - настроить контроль версий etckeeper
    - настроить fail2ban

    Следующий уровень паранои, это уже решения по типу Suricata IDS-IPS
    Ответ написан
    Комментировать
  • Нужен ли антивирус на linux server?

    Adamos
    @Adamos
    Вообще-то антивирус - достаточно вольно используемый термин.
    Антивирусы в том виде, как они есть для Windows, для Линукс-сервера, как правило, довольно бесполезны - разве что с этого сервера получают файлы Windows-пользователи или запускают их через Wine, скажем.

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

    @AlexVWill
    на файлопомойке или почтовике - да, в прочих случаях почти что всегда нет, если не предполагается возможность загрузки и обмена сторонними исполняемыми файлами
    Ответ написан
    Комментировать
  • Нужен ли антивирус на linux server?

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

    антивирь ставится для проверки транзитных файлов и соединений, а это от операционки не зависит никак.
    Ответ написан
    Комментировать
  • Нужен ли антивирус на linux server?

    А вот нужен ли он например на веб-сервере или локальном сервере?

    Что такое "локальный сервер"? На веб-сервере не нужен, тк он не должен иметь прав на запись и тем более на запуск произвольного кода.

    Сервере базы данных?

    Он тоже не должен иметь доступ на запись туда, куда ему не нужно. И тем более он не должен иметь прав на запуск исполняемых файлов.

    И файловом сервере?

    Тоже должен иметь право на запись только в определённые директории, к которым никто другой не должен иметь доступ, чтобы случайно не запустить ничего. Прав на запуск соответственно он тоже иметь не должен.

    В итоге получается, что единственный риск - если злоумышленник вдруг найдёт RCE для СУБД или файлового хранилища, и то тут весь риск - потеря данных и майнеры.

    А на почтовые сервера антивирус ставят не для защиты сервера, а для защиты пользователей.
    Ответ написан
  • Нужен ли антивирус на linux server?

    Sanes
    @Sanes
    Ниразу не пригодился. Иногда для веб-приложений ставят. Когда у вас неконтролируемые CMS или самопальные скрипты. Например если у вас публичный хостинг, то ставить надо.
    Ответ написан
    5 комментариев
  • Не работает class в javascript?

    yarkov
    @yarkov Куратор тега JavaScript
    Помог ответ? Отметь решением.
    // Либо так
    static randInt
    // Либо так
    const rand = new random();
    rand.randInt
    Ответ написан
    Комментировать
  • Что делать с этой проблемой?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Исходник в кодировке utf. 'А' действительно занимает 2 байта. Что видит компилятор? Видит 2 байта между кавычками и ругается.

    setlocale() - эта функция во время исполнения программы настроит, в какой кодировке у вас будет просиходить ввод/вывод с консоли. На кодировку исходника оно никак не влияет.

    Тут 2 варианта решения: Или поменяйте кодировку исходника и настройки локали, чтобы 'А' занимало один байт, или работайте с wstring.

    Чтобы не путаться с кодировками, напишите программу, которая выводит численное значение байт прочитанной строки. Запустите ее, введите туда 'А', смотрите, что оно выводит. Поэксперементируйте с разными настройками setlocale(). Если выводит 2 байта - вот эти два байта надо писать в case и использовать wstring. Если выводит один байт, вот его в case и вставляйте.
    Ответ написан
  • Почему современные языки отказываются от ООП?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Они не отказываются. Скорее происходит отказ от "парадигмы" разработки. Языки стали мульти-парадигменные. Посмотрите на С++20 или Scala. Их невозможно положить в коробочку ООП или ФП. В них есть почти полный набор фич и оттуда и отсюда. И с каждым годом число фич растет и граница размывается. Нашим потомкам будет вообще непонятно где идет раздел.

    По поводу golang. Это язык ограниченной разработки. Его создавали специально чтобы порог вхождения был низкий. Фактически делали лайтовый С++ которому можно обучить школьника за 14 дней. Но с перформансом выше чем у Питона. Поэтому выражать какие-то сложные конструкции на типах там скорее всего не получится. У golang есть свой манифест. Я забыл как он называется и где он. Вобщем там довольно четко обоснованно почему такие принципы и почему такая идеология.
    Ответ написан
    1 комментарий
  • Зачем надо закрывать курсор при работе с БД?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Дело в том что курсор может потреблять ресурсы. Например вы захотели взять первые 10 строк из 10000000 выборки но предварительно отсортировали. Выбрали 10 строк и не сделали финализирующие протокольные действия в Python. База данных будет удерживать в памяти алгоритмы и структуры данных для снапшота результата этого запроса до тех пор пока не придет явный CLOSE с вашей стороны либо интеллекуальный драйвер который еще и обладает логикой уборки мусора сам не догадается что Statement уже вышел из scope вашего использования и может быть удалён GC.

    Я был свидетелем ситуации когда крупное ent-приложение Java/Oracle переполняло память из-за неверной обработки Exception и плодила много незакрытых курсоров в БД. Java от этого не сильно страдала (GC всё убирал) но страдал Oracle. Потому что уборка происходила слишком поздно. Пофиксилось тогда переписыванием с try на try-with-resources.

    Поэтому если вы неряшливо обращаетесь с курсорами (явными и неявными (обычный select к примеру может прождать неявный курсор)) то не ваше приложение а база данных почувствует себя плохо. Как быстро и какие ошибки вы будете получать - зависит от настроек вашей БД.
    Ответ написан
    Комментировать