• Как правильно распределять ответственность между классами?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Поскольку топик тегирован PHP то я-бы предложил взять PHP фреймворки и смотреть как они видят себе реализацию шаблона например репозиторий. Я-бы мог рассказать о Spring Data Repository но боюсь что для PHP будут отличия и автор просто запутается.

    Банда Четырех (юбилейное издание) описывает шаблоны проектирования .... эээ кажется на SmallTalk и С++. По крайней мере во Введении книги они об этом писали. Поэтому читая код надо уметь читать глазами сущности этого мира и не пугаться.

    Что такое шаблон Store - я не знаю. Опять-же это специфика PHP скорее всего.

    Что такое шаблон Сервис. Ну я вообще не рискнул бы его никак определять. Это КМК слишком размытое понятие и его надо срочно сузить. Хотя-бы до уровня техно-стека. Может сервис в терминологии SOAP это одно. Облачный сервис - может быть вообще другое. Короче архитекторы этих технологий будут бить друг друга здесь как епископы разных церквей друг друга за ереси.

    Сервис для ООП - вообще седьмая вода на киселе. Вообще ООП надо начать и закончить на его полиморфизмах и наследованиях и поставить точку. Дальше - нет ООП. Дальше идет хаос и новые виды абстракций от вендора языка. Аннотации и аспекты и рефлексия и прочий бред.
    Ответ написан
    1 комментарий
  • Что эффективней, чтение из файла или массив?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Вопрос не глупый а вполне себе хороший.

    Его плавное развитие приводит к концепции баз данных. Самое главное что можно сказать тезисно это
    1) Пока памяти хватает (массив) - используй смело память
    2) Диск - больше и дешевле памяти
    3) С памятью работать легко. С диском - очень неудобно и надо обрабатывать IOExceptions почти всегда.
    Диски внезапно полны сюрпризов. Могут быть сетевыми дисками.
    4) Разные диски имеют скорость на порядки разную.
    5) Диски ведут себя очень плохо на random access. От этого даже метрика IOPS появилась.
    Ее очень любят обсуждать админы баз данных.
    6) Существуют структуры данных которые спецом создавались только для дисков (B+Tree)
    7) Диск - переживает выключение питания.
    8) Самые разумные решения - сочетают в себе и диск и память в тех частях кода где это нужно.
    9) Есть интерфейсы программирования которые виртуализирут диск как память. Этим пользуется
    SQLite например.
    10) Диск может достигать очень высокой последовательной скорости чтения или записи в файл
    при условии отсутствия конкурирующих записей в данный момент. Этим пользуются в БД
    для журналирования событий.

    В принципе если современный программист просто будет использовать только оперативную память
    то никто ему не сможет ударить по рукам или подойти с какой-то метрикой и чего-то там измерив
    сказать что он неправ. Тут уж только падения по OOM и потери информации и performance issues
    могут быть каким-то значимым аргументом.
    Ответ написан
    3 комментария
  • Как узнать об изменении в сторонней БД?

    mayton2019
    @mayton2019
    Bigdata Engineer
    В классический реляционных БД - никак. БД проектировались исключительно как сервер который "отвечает на вопросы". И при этом сам ничего не уведомляет.

    Если нужно ловить события в той точке где они возникают - то лучшее место не БД а именно сервер приложений. И для хранения событий использовать топики Kafka или RabbitMQ.

    Если этого всего нет - то тогда дергай запросы 1 раз в час. Другого выхода нет.
    Ответ написан
    Комментировать
  • Куда расти дальше?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Я не специалист по C# поэтому по качеству кода не смогу ничего сказать. Но могу сказать по другой части.

    Проект создан в 2 коммита. Это обман. Так не бывает. Программисты не делают проект в 2 шага. Обычно
    идет некий итерационный процесс когда в течение дня. Либо в течение итерации разработки какой-то
    фичи делается бранч. И вмерживается в мастер. Или делается отдельный коммит в мастер с описаием что делалось.
    И тогда проект приобретает ИСТОРИЮ изменений. По истории видно как авторы работали. Что изменяли.

    У проекта нет документации. Надо описать что это для чего и так далее. Нет инструкции по сборке.
    Каждый разработчик должен иметь возможность собрать любой проект с гитхаба прочитав инструкцию.
    Сборка - это не программирование. Это отдельный скилл. Почитай что такое сборщики. И это не среда
    разработки. Это отдельный продукт. Обычно в консоли работает. Чтоб на сервере собирать проекты
    в режиме автономного процесса без участия человека.

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

    Нет внешних метрик здоровья проекта. Непонятно в каком состоянии щас он находится. Компилируется ли вообще? Посмотри как другие проекты в гитхабе выглядят.

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

    mayton2019
    @mayton2019
    Bigdata Engineer
    Ну если человек по жизни - шепелявый то какие питчи не накладывай то все равно будет шепелявый.
    А вообще задачу надо смотреть более широко. Не только голос но и согласные буквы. Слова-паразиты.
    Паузы. Кашель. Шмыгание носом. Просто грамотность речи. Все это маркеры которые просто
    приближают метрику к нужному человеку. Опять-же эти маркеры нужно было собирать заранее для всей выборки людей.

    Вообще во всех задачах распознавания нужно брать как можно более широкий вектор параметров.
    Ответ написан
    Комментировать
  • "прикладной код Java" - это что?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    В тексте вопроса написано много чепухи. Java может использовать внешнюю память. Кажется еще
    в Java 8 для Apache Ignite (и других NoSQL систем) были попытки использовать неуправлямую
    память через ByteBuffer. История где-то об этом сохранилась я думаю.

    Начиная с JDK-14 (могу ошибаться) завезли Foreign Memory API который оперирует с памятью
    более продвинуто.

    По поводу
    в Java не надо следить за памятью

    - неправда. Следить за памятью надо всегда. Иногда это делает разработчик (для С/C++)
    а иногда это делает GC или умные механизмы borrow-checker (Rust).
    Если не следить то долго работающие процессы пожирают всю память ОС
    до тех пор пока не будут убиты через ОС OOM killer. Возможно под слежением
    имелись в виду накладные расходы на работу GC? Но эта проблема специфична
    только для приложений которые активно делают new и переживают хотя-бы одну
    эпоху. Кроме того в Java есть несколько разных GC которые просто обнуляют
    все тезисы например 2000х годов и обсуждать их надо уже совсем как другие
    алгоритмы которые имеют другие свойства. Грубо говоря знания по GC очень
    сильно устарели после G1, Shennandoh e.t.c. Нужно учить заново всё.

    прикладной код Java - заменить на “прикладной код движка Java”

    Это вообще невозможно прокомментировать т.к. идет жонглирование терминами без
    определений. Что такое движок в данном случае - непонятно?

    В любом случае тебе надо звать в студию этого загадочного Романа и не плодить свои домыслы.
    Ответ написан
    2 комментария
  • Как настроить resolv.conf?

    @BurundukBurundukov
    Для NetworkManager в rpm/rhel based дистрибутивах воспользуйтесь конфигурацией ipv4.dns-options Пример: nmcli con mod CON_NAME ipv4.dns-options “timeout:1 rotate”. После перезагрузки можете проверить что в resolv.conf будут вноситься нужные параметры
    Ответ написан
    Комментировать
  • Bitbucket фсе, блокирует российские IP?

    @Nikita44
    Лайфхак - на битбакет можно зайти с www

    на здоровье
    Ответ написан
    2 комментария
  • Уже наступили реали, когда можно спокойно сменить прошивку телевизора?

    @tukreb
    Нет и вряд ли когда либо наступят.
    Единственное правильное решение, покупать "тупой" телевизор, а к ней приставку на Андроиде, и самое главное это вам обойдётся чуть ли не в 2 раза дешевле.
    Ответ написан
    1 комментарий
  • В чем причина низкой производительности IPSec на Mikrotik RB952UI-5AC2ND-TC?

    CityCat4
    @CityCat4 Куратор тега VPN
    //COPY01 EXEC PGM=IEBGENER
    Нет аппаратного шифрования, следовательно шифрование нагружает процессор микротика. Когда рассчитвают именно на туннели по IPSec, обычно берут модели с аппаратным шифрованием. Можно попробовать установить со стороны микротика шифрование попроще - aes128-cbc и PFS modp1024, но особо прорывного действия я не оиждаю.
    Прорывным действием будет только замена на модель с аппаратным шифрованием.
    Ответ написан
    Комментировать
  • Как перенаправлять авторизованных пользователей на домашнюю страницу?

    azerphoenix
    @azerphoenix Куратор тега Spring
    Java Software Engineer
    Давно писал вот, такой код.
    Должен сработать.

    @GetMapping("/")
      public String homepage(Model model) {
    
        // Проверяем авторизован ли пользователь и если авторизован, то редиректим его в /dashboard
        if (SecurityContextHolder.getContext().getAuthentication() != null
            && SecurityContextHolder.getContext().getAuthentication().isAuthenticated()
            && !(SecurityContextHolder.getContext().getAuthentication()
                instanceof AnonymousAuthenticationToken)) {
    
          return "redirect:/dashboard";
        }
    
        return "index";
      }
    Ответ написан
    2 комментария
  • Нужно ли переносить центр с L3 на маршрутизатор?

    @SunTechnik
    Зависит от того, какие роли вы планируете возложить на pfSense.
    Если планруется, что он будет иметь доступ ко всем vlan и рулить доступом между vlan - то, возможно, придется перенести.
    Если же pfSense отвечает тоолько за выход в internet или vpn, то пусть Aruba остается в своей роли. Надо только на ней default (или необходимые) маршруты добавить..
    Ответ написан
    Комментировать
  • Критика кода возможна?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Тут вместо цепочки if можно switch-case использовать.

    @Override
        public void notification(Event event) {
            if (event.type() == EventType.REDRAW_REQUEST) {
                printField(event.field());
                return;
            }
    
            if (event.type() == EventType.BOMB_OPENED) {
                System.out.println("You opened bomb. Game failed");
                printField(event.field());
            }

    И в других местах - похожие косяки.
    Ответ написан
    Комментировать
  • Можно ли роутер и коммутатор соединить двумя и более проводами, для увеличения скорости?

    @TheBigBear
    СтарОдмины мы
    Можно
    И Микротик, и этот D-Link умеют LACP
    А не хотите купить кабель прямого подключения SFP/SFP+ MikroTik XS+DA0001 и получить 10 Gbit? (или подобный совместимый)
    В обоих железках я так понимаю SFP порты простаивают
    Ответ написан
    1 комментарий
  • Можно ли роутер и коммутатор соединить двумя и более проводами, для увеличения скорости?

    anthtml
    @anthtml
    Системный администратор программист радиолюбитель
    LACP, Link Agregation, Bonding и подобные запросы в гугл пробывали? можно с добавлением подстроки mikrotik+d-link
    Ответ написан
    Комментировать
  • Можно ли роутер и коммутатор соединить двумя и более проводами, для увеличения скорости?

    Melkij
    @Melkij
    PostgreSQL DBA
    trunk/bonding/teaming/LACP
    https://ru.wikipedia.org/wiki/%D0%90%D0%B3%D1%80%D...

    Для вашего коммутатора заявлен LACP (802.3ad), микротик его тоже имеет. Попробуйте настроить.

    Если просто включите второй кабель без настройки - получите петлю и сеть ляжет.
    Ответ написан
    Комментировать
  • Крестики-нолики.Проблемы с ходом Х?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Нет-нет дружище этот код надо выбросить. Переписывать или улучшать его нет смысла. Он плох. У тебя есть координатная сетка. Но ты почему-то не пользуешся этим а вычисляешь какие-то частные случаи.

    Вообще в изучении программирования - копирование чужого кода - это не плохо. Это вполне себе метод. Только скопировать нужно разобравшись как новый код работает. И сравнить его со своим решением. Я тоже так делал когда изучал бейсик для БД1001 или для Sinclair. Я просто копировал всякие текстовые игры-квесты и потом изменял и улучшал их.

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

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Если используется система сборки maven или gradle, то номер версии java устанавливается через соответствующие конфиги.
    Конфигурация проекта в idea будет работать только во время редактирования кода, а во время компиляции и выполнения - будет использоваться конфигурация системы сборки проекта.

    После изменения версии java нужно будет пересобрать проект.
    Ответ написан
    Комментировать
  • Сказано, что различие между for и while в пространстве видимости. Что это значит?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Наверное имеется в виду это. Вот тут переменная i может быть использовани и после цикла.

    int i = 0;
    while(i<10) {
     doSomething(businessObj[i]);
     j++;
    }
    i = 0;


    Кострукция for - замыкает область видимости и переменную не видно. Хотя в наше
    время код больше тяготеет к более function-style кодингу когда итератор
    или параметр цикла вообще не нужен. У нас есть некий foreach и он делает все что надо.
    Ответ написан
    4 комментария