Pull to refresh
55
0
Сергей @sergrt

Программист C++

Send message

На мой взгляд очень важно узнать больше про процессы. Это лучше делать на поздних этапах отбора, и лучше с потенциальными коллегами. Кто придумывает задачи, как их спускают разработчикам. Кто фиксирует definition of done, как тестируются выполненные пункты. Как работает команда - по спринтам или от релиза до релиза, и в связи с этим как набирается скоуп. Как дела обстоят с техническим долгом, как он попадает в скоуп работ, трудно ли убеждать менеджмент в необходимости таких работ.

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

Статья, безусловно, интересная, и в первый раз почитать её было очень любопытно.
Аналогично, с трудом представляю, как можно учиться программировать, например, на C# по таким материалам, но для некоторых вещей такой формат довольно неплох. Книга про паттерны проектирования, например, зашла очень хорошо. Есть мнение, что и этот материал впишется удачно.
Это, судя по всему, системная ошибка. Видел такое же в других отрывках книг про Python. Наверное, чтобы читатели не расслаблялись :)
Возможно, не установлен pam_pwdfile.so. В /lib/security (или /lib64/security) должен присутствовать таковой.
Автор — авторитетище, вопрос о прочтении вообще не стоит. В книге содержится довольно много полезной информации, правда, Роберт Мартин несколько репетитативен, и любит рассказывать про принципы SOLID в каждой своей книге :)
ph_piter, будут ли «Чистая архитектура. Искусство разработки программного обеспечения» и «С++17 STL. Стандартная библиотека шаблонов» в электронном виде? Контакты на сайте молчат с ответами на такие вопросы.
И в качестве пожелания — доставка по Петербургу за 175 р. — это, конечно, здорово, если бы не срок в 2 недели. Опция «доставить хорошей курьерской компанией (1-2 рабочих дня, 250р)» была бы очень кстати.
Судя по всему, там нужно писать правильный плагин. То, что есть, U2F не реализует, только OATH HOTP и HMAC-SHA1 Challenge-Response.
Есть у меня такой токен. Он в общем-то и работает, и пользоваться удобно… Но число приложений и аккаунтов, которые им может защитить среднестатистический пользователь, очень мало. Особенно жаль, что не удалось скрестить его с KeePass.
Явление системное, полностью согласен с оратором уровнем выше, как будто в одном филиале обслуживаемся.
Объявление функции не чисто виртуальной говорит пользователю, что это не обязательное требование, в отличие от способа получения и сохранения строки. Пример:

class XorCrypt : public Crypt {
public:
    XorCrypt() = default;
private:
    virtual std::string getString() {
        std::cout << "xor str get\n";
        return "";
    }
    virtual void saveString(const std::string& content) {
        std::cout << "xor str save\n";
    }
    virtual std::string applyEncryption(const std::string& content) {
        // Шифрование
        std::string result = applyXor(content);
        std::cout << "xor\n";
        return result;
    }
};
И как это метод saveString не подходит под ваше описание?

Так, что метод saveString напрямую не вызывается из наследующего класса.
Да и в таких случаях надо использовать protected, а не private.

Для этого должна быть какая-то необходимость, например, вызов из виртуальной функции наследующего класса одноимённой функции базового. В примере это не используется, и объявление функций закрытыми сделано намеренно.
Спасибо, под таким углом я не смотрел. Полезно обсуждать такие штуки с архитектором :)
Между базовым классом и имплементатором, или между пользователем и стратегией. Между частями паттерна, короче говоря.

Если есть интерес продолжить беседу, давайте синхронизируем часы, похоже мы разные вещи обдумываем.
Мы хотим предоставить пользователю алгоритм сортировки, который он мог бы использовать со своим предикатом (си) или с виртуальной функцией, определяемой в наследующем классе (c++). Что там в этой функции — нам, как составителю алгоритма, вообще неинтересно. Вплоть до того, что класс с алгоритмом сортировки может быть шаблонным и сортировать мы теоретически можем всё, что угодно путями, которые нам, как составителю, неизвестны, неинтересны, и оставлены на откуп пользователю. Какой контракт будет нарушаться, если предикат или функция будет выполнять работу, неочевидную нам, если на выходе всё равно будет сортированная последовательность?
Кстати, в упомянутой Lertmind книге Фримена "Паттерны проектирования" как раз что-то подобное приводится в качестве примера, сортируют уток.

Ту, которая описана в поведении, как ни странно.

Это шаблонный метод, он исполняет алгоритм с вариациями, всё вполне легитимно.
Это будет нарушением контракта.

Какого контракта?

Паттерн в первую очередь определяется семантикой.

Это паттерн поведения, какую семантику вы от него ожидаете?
Любопытно, нужно только переименовать конструкторы и сделать encrypt открытой :)
Теоретически, в функции needSwap могут происходить самые чудесные вещи, измерять вариативность алгоритма семантическими представлениями о сортировке не совсем корректно.
Что касается паттернов и ООП, тут да, разговор ни о чём — классические паттерны "банды четырёх" именно для ООП. Хотя в процессе гуглежа нашлась книга "Patterns in C", реализация паттерна "Стратегия" там довольно занятная.
Аргументы понятны. В случае с сортировкой — это всё же шаблонный метод — налицо (сложный) алгоритм, вариативная часть, изменена лишь реализация "замены" части алгоритма в соответствии с реалиями си.
Вот тут показана реализация шаблонного метода для сортировки. Представим, что у нас чистый C, передаём указатель на функцию. Почему это будет стратегия? Вообще, навскидку не придумалась реализация стратегии без классов, буду благодарен за пример.

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity