• R,w,x для файлов и папок?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    Обращаясь к папке, вы просто считываете содержимое "файла со списком имен в этой папке".

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

    Это разные операции - прочитать список каталога, и обратиться по прямому пути к файлу или каталогу.
    Ответ написан
    Комментировать
  • R,w,x для файлов и папок?

    SagePtr
    @SagePtr
    Еда - это святое
    В случае с папкой - если есть аттрибут x, но нет аттрибута r, вы не можете прочитать содержимое папки, но при этом можете работать с файлами в ней - читать и писать (при наличии прав), обращаясь к файлам по именам. Если нет аттрибута x, то вы не можете получить доступ к папке или к вложенным в неё файлам/папкам никак, вне зависимости от их аттрибутов.
    Ответ написан
    7 комментариев
  • Где найти проекты для начинающего программиста С++?

    @asd111
    Можешь попробовать сделать биндинги для яндекс catboost для языков которые там еще не сделаны. Это не так сложно зато сделаешь полезное дело и поработаешь с ребятами из яндекса.
    В целом у яндекса довольно хороший с++ код и можешь поискать в их проектах на гитхабе такие где в issues есть help wanted или как то так - это фичи которые они не планируют реализовывать самостоятельно но кому то эти фичи были бы полезны.

    В с++ надо знать стандарт языка поновее, stl и boost.
    Ответ написан
    Комментировать
  • Как склонировать ОСь на другое железо через rsync вместе с ядром?

    @MechanID
    Админ хостинг провайдера
    1 Уберите --exclude=/boot/* и ядро скопируется
    2 после rsync не забудьте установить загрузчик.
    Грабли могут быть:
    1 если на новом железе есть устройства для которых нет драйверов в переносимой ОС.
    2 содержиоме /etc/fstab возможно придется привести в порядок
    Ответ написан
    Комментировать
  • Как перезапустить USB порты на Linux?

    t_q_l
    @t_q_l
    Интересная личность
    Попробуйте способы, описаные тут:
    • компиляция программы, которая делает soft reset для USB-порта
    • решение через флаги /sys/bus/pci/...
    • скрипт на python
    • скрипт на bash

    и другие.

    Мне кажется, что на bash проще всего:

    for i in /sys/bus/pci/drivers/[uoex]hci_hcd/*:*; do
      echo "${i##*/}" > "${i%/*}/unbind"
      echo "${i##*/}" > "${i%/*}/bind"
    done
    Ответ написан
    1 комментарий
  • Как правильно использовать строки в плюсах?

    @Mercury13
    Программист на «си с крестами» и не только
    • std::string — как правило, если не указано противное.

    • QString, AnsiString/UnicodeString и прочие — в соответствующих фреймворках, обычно очень близко к интерфейсным функциям.

    • char* — практически не используется в реальном коде. В основном для оптимизации, если есть собственное управление памятью. Довелось как-то в собственном разборщике XML (работает в 2,5 раза медленнее рекордсмена, pugixml. Зато даже это в разы быстрее Excel’я, пространства имён «из коробки», расход памяти мизерный и программирование простейшее.)
    Зато по-чёрному используется его const-аналог.

    • const char*. Это может быть одинокий const char* + нуль-терминированная строка, или указатель+длина, или указатель на начало + указатель за конец.
    1. Если ожидается, что в функцию будем передавать строковый литерал.
    void writeEnum(st::Stream& st, int value, const char* names[]) {}
    
    enum class Letter { A, B, C, …, Z, NN };
    const char* natoNames[static_cast<int>(Letter::NN)] = { "alpha", "bravo", "charlie", … };
    writeEnum(someStream, static_cast<int>(Letter::E), natoName);

    2. Если операцию со строкой можно произвести «на месте», не заводя новую память: (trim, как известно,— обрезка пробелов в начале и конце)
    void trim(const char*& beg, const char*& end);

    3. Если структура данных паразитирует на чужих строках, не заводя своей памяти. Особенно если конструкция строк неизвестна (например, при передаче данных из плагина в плагин).
    struct ParasiteString { const char *beg, *end; };

    4. В библиотеках, если они реально настолько компактные, что нет нужды обязательно подключать жирный STL.

    • char[] — только как оптимизация, когда предельная длина строки известна и невелика.
    wchar_t* myFtos(double value, wchar_t* buf, const FloatFormat& format) {}
    
    wchar_t buf[100];
    myFtos(100.500, buf, FloatFormat::NICE);
    Ответ написан
    Комментировать
  • Для чего нужно ООП?

    @AlexSku
    не буду отвечать из-за модератора
    Объекты (классы) это более сложные структуры типов.
    Есть простые типы: целые и дробные числа, логические значения, строковые символы.
    Потом появились массивы (много элементов под одним именем плюс индекс) и записи (структуры с полями).
    Объекты (классы) это записи (структуры), в которые кроме полей обычных типов добавлены ещё функции, называемые методами. Для объектов (классов) введено наследование, конструкторы и деструкторы, методы доступа (public, private...).
    Ответ написан
    Комментировать
  • Как использовать ооп на практике?

    @red-barbarian
    Ну прежде всего понять, что есть две (точнее больше) парадигмы. ОО и процедурная.
    Это типы мышления. Первая это разбивать систему на части, как на компоненты. И описывать связи между ними. Вторая - Описать структуру данных и функции на ними. И у них есть свои плюсы и минусы. (да. ООП это не волшебная пуля.)
    Второе. Применения ООП эффективно к достаточно сложной системе. Сложная в смысле, что твой мозг определит там много частей и много связей между ними. Например вывести на экран приветствие это вряд ли сложное.
    Третье. Понять , что дублирование это зло. Это не только копипаст, но делать дважды похожие классы компонентов с начала. Применять нужно наследование. В суперклассы переносить общее.
    Четвертое. Система должна быть гибкой. Если приходят новые требования, нужно легко их реализовывать. И реализовывать локально. Т.е. по мере поступления изменений, мы находим места которые часто изменяются и стараемся вынести их в отдельные классы. В итоге получаем, при новом изменении, мы меняем только этот класс ничего более не цепляя.
    Пятое. понять что между компонентами есть некий протокол взаимодействий. И для компонент важен именно он, а не реальный объект по ту сторону. Пример: розетка . не важно какая она в стене, в удлинителе, или от большой черной коробки, но в нее можно подключить утюг, компьютер, чайник и проч. Есть протокол - две дырки, напряжение 220 и достаточная мощь и этого достаточно. Это дает возможность менять компоненты не затрагивая остальные.
    Примерно так.
    По поводу принципов. любых. (ооп или солид) Обязательно нужно знать что они решают. Какую проблему. Это позволит не усердствовать. А применять в меру. оставляя код проще.
    ну и книги по анализу.
    Ответ написан
    Комментировать
  • Как правильно вынести генерацию писем в отдельный сервис?

    GTRxShock
    @GTRxShock
    SA
    Не совсем понятно, если честно, вы здесь одобрения спрашиваете?

    По сабжу, использование очередей, да, это хороший подход для взаимодействия сервисов, и использование шаблонизаторов хорошо при генерации писем в том числе.
    Что взять? Да на что глаз упадет, тут во многом советы субьективны, так что оцените доки/сообщество и вперед)

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

    @BashkaMen
    C# программист
    Нужно сделать API для взаимодействия.

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

    https://habrahabr.ru/company/mailru/blog/115163/
    Ответ написан
    Комментировать
  • Кау запустить fast-cgi программу на nginx?

    @asd111
    Его не нужно ложить в папку, его нужно запустить, потому что fast cgi приложения работают как обычный сервер. По идее ваше fastcgi приложение должно открыть порт 9000 и слушать входящие соединения. Т.е. допустим приходит запрос на 80 порт в nginx, а он перебрасывает запрос на вашу программу-сервер на порт 9000.
    Ответ написан
    Комментировать
  • Какими инструментами вы пользуетесь при разработке на C++?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    1) IDE (QtCretor) -- без комментариев
    2) gcc -- компилятор, gdb -- отладчик; иногда clang/lldb
    3) git и tig (текстовый интерфейс для гита)
    4) valgrind -- в основном профилирование
    5) meld -- дифы
    6) vim -- когда надо что-то мелкое поредактировать на сервере
    7) браузер -- без комметариев
    8) Ну разные консольные утилитки по необходимости, grep, sed, nm...
    9) cppcheck -- статический анализ
    10) Иногда кланговые санитайзеры
    Ответ написан
    Комментировать