• Как установить и настроить кучу пакетов в debian через скрипт, и есть ли такие готовые скрипты?

    ky0
    @ky0
    Миллиардер, филантроп, патологический лгун
    Для подобных вещей существует прекрасный Ansible.
    Ответ написан
    Комментировать
  • Как установить и настроить кучу пакетов в debian через скрипт, и есть ли такие готовые скрипты?

    @Drno
    Поддержу насчет lxc контейнера. 1 раз установить в него всё, сделать его экспорт. и потом просто разворачивать на нужной машине. внутри уже всё будет...
    Ответ написан
    Комментировать
  • Что такое асинхронный сокет?

    15432
    @15432
    Системный программист ^_^
    нет, эквивалентность многопоточности и асинхронного сокета отсутствует.

    попробую объяснить суть асинхронного сокета на простом примере.

    подходите вы к лотку купить минералки, а её нет, но продавщица сообщает, что скоро привезут.

    возможные варианты вашего ответа:
    1) "я подожду" - синхронный сокет, программа ожидает, пока не придёт сообщение.
    1.5) "долго не везут что-то, надоело ждать, ухожу" - синхронный сокет с таймаутом
    2) "ну ладно, я попозже загляну" - асинхронный сокет, программа не ждёт сообщения и занимается своими делами дальше
    2.5) "я вернулся, ну как, привезли? да? ну вот и отлично, забираю" - асинхронный сокет, очередная попытка приёма данных, на этот раз успешная
    3) "алё, Вован, я стою минералку жду, вернусь попозже, работай, не отвлекайся" - синхронный сокет + многопоточность. один поток ожидает приёма данных, другой поток работает
    3.5) "Вован, тут минералки ещё нет, ща вернусь" - многопоточность + асинхронные сокеты. несколько потоков работают одновременно, на приеме данных не блокируются
    Ответ написан
    2 комментария
  • Удалённые рабстолы Linux на замену Windows это возможно?

    @alex1478
    Линуксовый RDP всё равно будет хуже виндового, тк последний тесно интегрирован в саму систему и, как минимум, умеет использовать аппаратное ускорение графики.
    Линуксовый аналог виндового RDP, близкий по функционалу и задержке - это SPICE. На сервере запускается Xorg с виртуальным SPICE дисплеем, удаленный клиент подключается к нему по TCP. Но аппаратного ускорения графики нет, всё рендерится на CPU, однако, к примеру, смотреть ютуб вполне комфортно.
    Ответ написан
    6 комментариев
  • Как сделать вывод части информации в консоль после ввода команды?

    paran0id
    @paran0id Куратор тега Linux
    Умный, но ленивый
    Перенаправить в less:
    ip a | less
    Ответ написан
    Комментировать
  • Как сделать вывод части информации в консоль после ввода команды?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    пользоваться пагинатором more или текстовым просмотрщиком less
    ip a | more
    ip a | less

    или фильтровать нужные строки через какой-нить grep
    Ответ написан
    Комментировать
  • Можно ли выделить память определенного размера?

    @code_panik
    В C++ можно, как и в C, выделить себе участок памяти, в котором будут жить объекты (в широком смысле, в том числе встроенного типа, напр. int). Чтобы начать жизнь объекта, его нужно разместить в памяти с соответствующим типу выравниванием. Если выравнивание, равное степени двойки, будет меньше требуемого для типа, то приведение с помощью static_cast типа указателя в выделенной памяти (void*, char*, unsigned char*) к указателю на тип объекта создает неопределенное поведение. Значит, чтобы безопасно использовать объект, размещенный в выделенной памяти, нужно убедиться, что он размещен (с помощью placement new) по выровненному адресу.

    Пусть мы создаем основной буфер под объект вызовом new unsigned char[size]. Будет ли буфер иметь достаточное выравнивание, чтобы в начале его разместить BUFFER::a типа int? - Да, если мы зарезервируем сразу достаточно памяти,

    In addition, if the new-expression is used to allocate an array of char, unsigned char, or std::byte (since C++17), it may request additional memory from the allocation function if necessary to guarantee correct alignment of objects of all types no larger than the requested array size, if one is later placed into the allocated array.


    Выражения new, new[] автоматически определяют размер выделяемой памяти и передают его низкоуровневым функциям operator new, operator new[] соответственно. Память, выделенная new, освобождается вызовом delete, для new[] - delete[]. Поведение delete похоже на поведение new выше.

    Значит, у нас есть всё необходимое чтобы реализовать свой класс буфера. Например,
    #include <cstddef>
    #include <iostream>
    #include <cstring>
    
    class Buffer {
    public:
      using preamble_type = int;
      static constexpr std::size_t preamble_size = sizeof(preamble_type);
    
      Buffer(const preamble_type& value, std::size_t bufferSize) {
        buffer_ = new unsigned char[preamble_size + bufferSize];
        ::new(buffer_) preamble_type(value);
      }
    
      Buffer(const Buffer& other) = delete;
      Buffer& operator=(const Buffer& rhs) = delete;
    
      Buffer(Buffer&& other) noexcept
        : buffer_(other.buffer_) {
          other.buffer_ = nullptr;
        }
    
      Buffer& operator=(Buffer&& rhs) noexcept {
        std::swap(buffer_, rhs.buffer_);
        return *this;
      }
    
      virtual ~Buffer() {
        destroy();
      }
    
      preamble_type& preamble() noexcept {
        return const_cast<preamble_type&>(
            const_cast<const Buffer *>(this)->preamble()
            );        
      }
    
      const preamble_type& preamble() const noexcept {
        return *preambleData();
      }
    
      unsigned char* data() const noexcept {
        return buffer_ + preamble_size;
      }    
    
      void resize(std::size_t size) {        
        if (buffer_ != nullptr) {
          auto newBuffer = new unsigned char[preamble_size + size];
          ::new(newBuffer) preamble_type(std::move(preamble()));
          destroy();
          buffer_ = newBuffer;
        }
      }
    
    private:
      preamble_type* preambleData() const noexcept {
        // return std::launder(reinterpret_cast<preamble_type*>(buffer_)); c++17
        return reinterpret_cast<preamble_type*>(buffer_);
      }
    
      void destroy() noexcept {
        preambleData()->~preamble_type();
        delete[] buffer_;
      }
    
      unsigned char* buffer_ = nullptr;
    };
    
    int main()
    {
      using std::cout;
      using std::endl;
    
      const std::size_t bufferSize = 100;
      Buffer b(100, bufferSize);
      const char hello[] = "hello world!";
      memcpy(b.data(), hello, sizeof(hello));
    
      auto c = std::move(b);
      cout << c.preamble() << ' ' << c.data() << endl;
    
      b = Buffer(5, 20);
      memcpy(b.data(), hello, sizeof(hello));
      cout << b.preamble() << ' ' << b.data() << endl;
      return 0;
    }


    Из кода можно выкинуть всё, что касается preamble_type, если считать, что первое поле всегда будет int. С другой стороны, код можно сделать обобщенным с минимальными изменениями. Например,
    template<typename PreambleT>
    class Buffer {
    public:
       using preamble_type = PreambleT;
       //...
    };


    Такой пример class Buffer, по-моему, скорее плохой, потому что только имитирует на C++ код, написанный на C. Так, мы не храним в классе размер буфера, поэтому нельзя определить операторы копирования. Детали реализации класса "утекают" в пользовательский код.
    Пока мы явно не сформулировали и не поддерживаем инварианты класса. Какое состояние объекта мы можем считать пригодным для использования?
    В частности, мы можем переместить содержимое буфера в другой объект конструктором перемещения, но потом к исходному буферу не можем применить resize. Даже если бы resize давал нам новый буфер, значение preamble потеряно. Если бы мы сохраняли preamble, тогда в конструкторе перемещения пришлось бы выделять память под новый буфер, но тогда этот конструктор уже не будет noexcept - плохо. Придется запретить перемещение?

    Если нужно убрать из класса всю работу с памятью, можно реализовать свой аллокатор, который будет размещать данные линейно, или поискать готовую реализацию.

    Наверняка есть лучшее проектное решение, такое которое не будет имитировать реализацию на C. Возможно, имеет смысл портировать решение на уровне интерфейсов, переписывая полностью на C++ детали реализации.
    Ответ написан
    Комментировать
  • Как в VS Code, быстро создать HTML шаблон?

    @inzor Автор вопроса
    ! и затем нажать enter, или ! и затем мышкой выбрать вариант emmet. Так получилось.
    Ответ написан
    1 комментарий
  • Flask render_template как передавать форматированный текст?

    Revencu
    @Revencu
    {{ msg|safe }}
    Ответ написан
    Комментировать
  • Как взаимодействовать с txt файлом, находящимся на сервере, с помощью с++?

    @rPman
    Вопросов тьма, от ответов на них зависит и результат
    Например - сервер доступен ли по какому то протоколу?
    во всех операционных системах можно настроить какой-нибудь протокол smb/nfs/ftp/http/ssh/... все они позволяют получить доступ к файлу так или иначе.
    Это вопрос не программирования а devops, настроить соответствующее приложение-сервер, на стороне клиента есть очень универсальная библиотека - libcurl (и одноименная утилита) умеет наверное все популярные и не очень протоколы.

    Само собой можно написать свой сервер по своим правилам (гуглить socket server c++) но стоит ли?

    p.s. netcat, консольная утилита, позволяет отправить через пайпы содержимое файла в сетевой сокет а на другой стороне соответственно наоборот принять, способ тупой, простой, на основе его и баш можно сделать однострочник сервер для отправки файла любому подключившемуся.
    Ответ написан
    6 комментариев
  • Могу ли я использовать эти дистрибутивы для повседневной жизни и разработки, и есть ли в них какие либо сборы данных и информации?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Считаю вообще извращением ставить на буки что то кроме винды или мак оси.
    Причин тому куча и не хочу разводить холивар.
    Сами линуксы можно разделить на 2 ветки rpm & debian
    Логично выбрать дистриб на котором вы и на работе работаете или близкий.
    Микрософт двигает убунту
    Оракл двигает свой рпм дистриб
    Красная шапка - красную шапку

    Железячники обычно выкладывают дрова под rpm и deb причем связанные с определенными ядрами.

    Мой совет юбунта с гномом
    Ответ написан
    3 комментария
  • Могу ли я использовать эти дистрибутивы для повседневной жизни и разработки, и есть ли в них какие либо сборы данных и информации?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Что-то сегодня какая-то засада прям на подозрительных людей.

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

    Но разумеется никто не мешает тебе провести самостоятельный аудит исходного кода
    Ответ написан
    Комментировать
  • Как работает VPS?

    @Drno
    на vps опенВПН сервер ставишь, пускаешь через него клиента - всё, пускай ходит куда хочет
    Ответ написан
    2 комментария
  • Как поставить пароль на архив tar/gzip?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Tar и gzip это очень старые утилиты. Им по 30-40 лет. И создавались они в те времена когда симметричное шифрование еще не было так развито.

    Но архивчик можно после упаковки зашифровать другими утилитами например openssl.
    openssl enc -in file.txt -out encypted_file.txt -e -aes256

    Я так делал когда шифровал бекапы oracle dbms.

    Если переписать чуть лучше скрипт - то можно объединить операции tar->gzip->openssl в один пайплайн
    без воздания промежуточных файлов.
    Ответ написан
    3 комментария
  • Как обновить Fedora 9 в 2022 году?

    martin74ua
    @martin74ua Куратор тега Linux
    Linux administrator
    Установить на соседней виртуалке с нуля, настроить, перенести данные, пользователей и т.п.
    Ответ написан
    1 комментарий
  • Что лучше поставить для backend`a?

    @rPman
    Для разработчика (если ты не visual studio и *.net разработчик) оптимальный выбор - linux, инструментарий в первую очередь там, удобно просто, наибольшее сообщество, когда как под windows весь этот инструментарий тестируется не так хорошо.

    Особенно тяжело новичкам, настраивать окружение и тулчейн в windows сильно сложнее, когда как в linux многое 'из каропки'.

    Выбор версии linux не так критичен с точки зрения разработки, но вот как новичку важно сообщество.
    Я бы рекомендовал ubuntu (точнее xubuntu или другие не unity версии, но это вкусовщина, все равно все меняется и доустанваливается в процессе одной командой), многие рекомендуют mint, основана она на debian как и ubuntu, но когда речь идет о дополнительных репозитариях и бакпортах (новые версии популярных пакетов, не выпускаемых для твоей версии ос), то ubuntu становится вне конкуренции
    Ответ написан
    2 комментария
  • Как запустить браузер в изолированной среде на Linux?

    martin74ua
    @martin74ua Куратор тега Linux
    Linux administrator
    не работайте от рута.....
    Ответ написан
    2 комментария
  • Как запустить браузер в изолированной среде на Linux?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Заведи себе пользователя-болвана. И от имени него запускай браузер. Ну а после работы можешь каждый раз убивать его профиль на локальном диске.

    Вообще если ты настолько беспокойный кабанчик что тебе надо именно сильная изоляция то посмотри на такие флешки-операционки как tails https://tails.boum.org/ они вот спецом созданы для мамкиных хакеров. Ничего не остаётся после них. Можешь прон смотреть. Или вещества в торе покупать. Или в хабре писать. Вобщем все можно.
    Ответ написан
    3 комментария
  • Как скачать файл с сайта командой scp и sftp?

    @Drno
    scp для подключения по ssh
    для выкачивания по ftp Логично использовать wget
    wget ftp://ftp.hp.com/pub/softpaq/sp40001/sp40001.cva
    Ответ написан
    4 комментария