Задать вопрос
  • Стоит ли брать Steam Deck как основной игровой девайс?

    Зависит от того, во что ты играешь.
    Steam deck - действительно крутой девайс, но:
    1. Никаких соревновательных игр на нём нет, кроме CS и доты. Для игр в них тебе нужен будет монитор, клавиатура, и мышь.
    2. Не все игры будут работать на нём.
    3. В тяжёлые игры будет играть тяжело. Например вот недавно попробовал поиграть в BG3 - в принципе запускается и играется, но сильно греется.

    По тому, если у тебя нет ПК - лучше попробуй собрать ПК, если для тебя портативность не является решающим фактором.
    Также можешь посмотреть на switch - там есть мутиплеер и есть свои эксклюзивы.
    Ответ написан
    1 комментарий
  • Расскажите, что это за ошибка и как ее исправить?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Похоже, у вас версия java до 17 :

    ...
    
        /**
         * The modifier {@code sealed}
         * @since 17
         */
        SEALED,
    
    
    ...
    Ответ написан
    2 комментария
  • Как изменить структуру кода?

    vabka
    @vabka Куратор тега Rust
    Нет, нельзя. Модули в Rust оперируют функциями/типами/трейтами, но не отдельными кусками кода.
    Ты можешь вынести функции f1 и f2 в отдельные файлы:

    main.rs
    mod m01;
    mod m02;
    mod m03;
    
    fn main() {
        m01::f1();
        m02::f2();
        let (i, p) = m03::f3();
        println!("i = {:?}", i);
        println!("p = {:?}", p);
    }


    m01.rs
    pub fn f1() {
     let num: u8 = 12;
     println!("num = {:?}", num);
    }


    m03.rs
    pub fn f2() {
     let s: String = "abc".to_string();
     println!("s = {:?}", s);
    }


    В случае m03 ты можешь попробовать сделать функцию, которая будет возвращать значения переменных i и p:
    pub fn f3() -> (u8, String) {
      let i: u8 = 88;
      let p: String = "xyz".to_string();
      (i, p)
    }


    PS: Я уже было хотел предложить макрос вида:
    macro_rules! f4 {
      () => {
        let i: u8 = 88;
        let p: String = "xyz".to_string();
      }
    }

    Но он работать не будет, ибо гигиена.

    Но можно сделать так:
    macro_rules! f4 {
      ($a: ident, $b: ident) => {
        let $a: u8 = 88;
        let $b: String = "xyz".to_string();
      }
    }
    
    fn main() {
        f4!(i, p);
        println!("{} {}", i, p);
    }


    PPS: ну и ещё есть макрос include!, который буквально решает твою задачу - вставить кусок кода из файла, но его я не советую использовать.
    Ответ написан
    2 комментария
  • Как обойти размер файла и хеш? Как сделать чит?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Чтоб подогнать файл под хеш надо сначала знать алгоритм хеширования.

    А вообще - ты мелкий хулиган :) Найди себе нормальную работу лучше.
    Ответ написан
    4 комментария
  • Оператор моб связи фиксирует местоположение абонента даже если не совершается звонков?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Да. Если брать абонентов А и Б то мобильный оператов всегда знает их положение с точностью
    до базовой станции. В противном случае А не смог бы дозвониться до Б. Радиус действия станции
    может быть от сотен метров до километров. Поэтому о точном местоположении абонента говорить сложно.
    Ответ написан
    Комментировать
  • Вылеты, артефакты, фризы системы. Виноват нищенский БП?

    mayton2019
    @mayton2019
    Bigdata Engineer
    265WATT - это мало для современных ПК. Воспользуйся онлайн-калькуляторами
    для расчета мощности. Там легко. Укажешь свою конфигурацию и все компоненты
    и приложение покажет сколько тебе надо.

    И возьми с запасом хотя-б 15% для других устройств.
    Ответ написан
    1 комментарий
  • Для чего нужна аннотация @Serializable в либах Java/Kotlin?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    С точки зрения Java language, аннотации ничего не делают. Они - как каменты в коде. Но они могут быть подсказками для фреймворков которые в compile time, classloader или runtime могут что-то выполнить над кодом. 99%
    это какие-то ORM/JSon подказки которые разъясняют фреймворку что делать. Например @Table(name="emp")
    подсказка JPA то класс относится к таблице emp.

    Ваш вопрос про либы Java/Kotlin слишком общий. Ничего конкретного нельзя сказать. Но по отношению к
    Serializable, можно предположить что это гарантия что класс можно сериализовать во внешнюю память
    (оперативная или диск) и это не нарушит никакой бизнес логики. Например это DTO которая полностью
    самодостаточная. Не все сущности вообще реально сохранить. Некоторые сущности - как орграф опутывают
    всю память Java и сохранять их накладно. Как корневой объект хипа. Дешевле дампнуть всю память чем
    сохранять такие объекты поштучно. Некоторые - имеют связи с внешними ресурсами Files/Sockets и вне контекста они не имеют смысла. Есть ключевые слова языка (transient) которые запрещают сериализацию для полей.
    Есть также проблема версионности для Serializable. Сохраненная структура не трекает ваши изменения
    по коду уже после того как вы что-то сохранили. Грубо говоря это не JSON. Если вставили новое поле - можете
    старый файл и не прочитать. В качестве маркера проблемы там заводят специальное поле типа versionId или
    что-то такое. Просто для детектирования.

    Если вы хотите иметь тотальный контроль над сохранением - то определяйте Externalizable и там будут 2
    метода в которых вы контролируете Output/Input streams и сами пишете что сохранять и читать. А еще
    лучше брать библиотеки Kryo/Protobuf/Avro e.t.c. У них еще и есть оптимизации по скорости и по сжатию.
    Вы к этому придете эволюционным путем если будете писать систему где сохранение во вне - важно.

    Сериализация во внешнюю память это огромная проблема когда мы пытаемся подружить разные
    технологии (32-64 бит целые числа или разный порядок байт в машинном слове). Даже простое
    сохранение даты или строки может быть ошибочным если вы сохранили в Java а пытаетесь читать в C++.
    Нужна 100% бинарная совместимость всех структур. Вот библиотеки Протобуф и Авро
    как раз для этого создавались.
    Ответ написан
    Комментировать
  • Чем отличается ForkJoinPool.execute() от ForkJoinPool.submit()?

    submit возвращает Future, по которой можно отследить статус задачи, а execute - нет.

    Это вроде бы должно быть очевидно из их описания
    Ответ написан
    Комментировать
  • Куда положить dump.sql для автоподнятия БД с нужного дампа Docker?

    @Senture Автор вопроса
    Разобрался.

    Вот мой код:
    version: "2.15.1"
    
    services:
      postgres:
        image: postgres:13.3
        environment:
          POSTGRES_DB: "username"
          POSTGRES_USER: "username"
          POSTGRES_PASSWORD: "username"
          PGDATA: "/var/lib/postgresql/data/pgdata"
        volumes:
          - ./Initer:/docker-entrypoint-initdb.d
          - usr-data:/var/lib/postgresql/data
        ports:
          - "5437:5432"
    
    volumes:
      usr-data:


    В этом случае, нужно создать директорию Initer в корне (где лежит docker-compose.yml) и в нее положить необходимый dump.sql и все работает.

    Важно!: Если папку не создать, она появится автоматически после docker-compose up. Но будет естественно пустой, и даже если сделать down, в папку положить дамп, и поднять приложение (docker-compose up) бэкап уже не накатится, т.к. БД уже была проинициализирована ранее и никакие изменения к ней применяться не будут.

    Прошу прощения за такие глупые вопросы :D
    Ответ написан
    6 комментариев
  • Как исправить нарушение принципа DRY?

    @IRuuy Автор вопроса
    Прикрепил решение
    public Token match(ITokenType expectedToken, int tokenNum) {
        return match(t -> expectedToken == t.get_type(), tokenNum);
    }
    
    public Token match(Class<?> clazz, int tokenNum) {
        return match(t -> clazz.isInstance(t.get_type()), tokenNum);
    }
    
    private Token match(Predicate<Token> predicate, int tokenNum) {
        if(hasToken(_currentTokenNum))
            if (predicate.test(getToken(tokenNum)))
                return getToken(tokenNum);
    
        return null;
    }
    Ответ написан
    Комментировать
  • Почему при сборке compose не видит переменные окружения?

    @khevse
    Опция --env-file должна помочь:
    Ответ написан
    Комментировать
  • Нужен ли маршрутизатор, если у границы стоит сетевой экран?

    @gonzaman1
    Коллеги, чтото вы человека грузанули.
    Расклад для людей задающих такие вопросы.
    1. Пожалуй главное что нужно оценить - кол-во трафика, если у вас полтора землекопа, 2 коммутатора и 3 офиса в туннелях. При этом из внешнего прихода только впн для удаленных сотрудников - железный фаер избыточен.
    Если у вас многоуровневая коммутация с парой сотней вланов и сетевой структурой 10-20 разных офисах\производствах\странах с кучей данных для внешнего доступа железный фаер !!!удешевит!!!(я не ошибся) и обезопасит вашу инфраструктуру. Фаер нужен для разгрузки процессоров коммутаторов в сети.

    Отступление: бум железных фаеров был связан с ограниченными процессорными мощностями и колоссальным ростом трафика в прошлом. Было не выгодно создавать 2-6 процессорную железку и на аппаратном уровне ее обучать понимать обработку трафика. Это сейчас лохушная железка за 150$ может через себя пропустить 10гигабит\с и зароутить его в 20 вланов при этом иметь поднятый фаервол, работать с 10 впн клиентами и резать 25 клиентам на лане скорость соединения по разным конфигам и при этом иметь загруженность процессора 40-50%. А раньше для такого понадобился бы штат в 2 сервера, 4 л3 коммутатора и железный фаер. Я утрирую конечно, но не далек от истины.

    2. Сейчас железный фаер скорее стандартизированное решение для крупных компаний, я недавно настраивал офис крупной международной логистической компании. Так там все просто было: мы закупили и смонтировали схему железный фаер-л3-пое-server . Потом ребята из главного офиса закинули за 15 минут туда готовые конфиги и за пару часов залили на сервер данные. Через 3 условных часа была смонтирована голова офиса на 140 рабочих мест.

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

    Все сказанное не является истиной в последней инстанции ))
    Ответ написан
    3 комментария
  • Почему сайты открываются не с первого раза?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Я так понимаю что с какого-то года понятия Интернет больше нету. Есть государства. И каждое из них
    на своей территории ведет свою политику и свое видение Интернета. Вот в таких реалиях
    надо жить и задавать вопрос уже в контексте. И смена DNS может и не быть решением проблемы.
    Ну зарезолвишь ты имя. А по IP адресу еще остануться блокировки а то и по блокам адресов и по целым
    странам.
    Ответ написан
    5 комментариев
  • Как вытащить данные со страницы Binance?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Зачем лазить в binance с черного хода когда там есть официальный API https://www.binance.com/en/binance-api
    И куча коннекторов под все языки написаны.
    Ответ написан
    1 комментарий
  • Используем kafka + spring boot, периодически listener перестает получать сообщения?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    На производительность кафки влияет 4 сущности. Конфиг брокера, продюсера, консюмера и message configuration.
    Очень сложно разбираться в том что у тебя происходит на основании такого странного теста. Скажи
    сколько времени ты ждал этого загадочного listener. Как ты ждал. В какой лог смотрел. Почему
    ты вообще решил что это проблема. Может продюсер ничего не производит. Короче дай картину
    происходящего более подробную.
    Ответ написан
    2 комментария
  • При завершении работы экран ноутбука выключается, а система работает и начинает нагружаться. В чём причина?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Посмотри в системных логах операционки. За момент до shutdown он что-то пытается завершить и не может скорее всего.
    Ответ написан
    4 комментария
  • Может ли быть такое, чтобы фреймворк был быстрее ванили?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Ответ - и да и нет.

    Обычно классический ЯП - предполагает прямое (директивное) управление процессом.
    И качество оптимизации будет сильно зависеть от того как программист проработал весь прямой ход алгоритма.
    В том числе работу с I/O и сетью.

    Фреймворк - это ограничитель, который очень строго лимитирует присуствие программиста в результирующем
    коде. В идеале программист делате только хендлеры. Или лямбды. Как в Inversion of Control.
    Это позволяет хорошему фреймворку сильно соптимизировать поток выполнения базируясь
    на том что I/O и сеть будут обеспечиваться фреймворком а программист будет вставлять только лямбды.
    Кроме сети и ввода-вывода фреймворк может обеспечивать пул объектов (соединения с БД)
    и типичные шаблоны обработки ошибок (retry-pattern) перформанс (cirquit-breaker) и
    рейт-лимитеры и троттлинг.

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

    Но мы исходим из предположения что 80% программистов - середнячки и звезд с неба не хватают.
    Поэтому для них фреймворк - является предпочтительной методикой. И код с фреймворком
    скорее всего будет быстрее чем при прямом кодировании на той-же выборке кодеров-середнячков.
    Ответ написан
    Комментировать
  • Зачем использовать FileWriter?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Ну если открыть описание API то там достаточно четко описано.

    Object
     +- Writer (Abstract class for writing to character streams.)
         +- OutputStreamWriter (An OutputStreamWriter is a bridge 
              |                 from character streams to byte streams)
              +- FileWriter (Writes text to character files using a default buffer size.)


    Последний - буферизированный.
    Ответ написан
    6 комментариев
  • Где сохраняться все данные в айфоне, линукс, виндовс?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Для Windows/Linux.

    Почти для всех браузеров когда что-то скачал и потом нажимаешь Ctrl+J то открывается фолдер
    (обычно %UserProfile%/Downloads) и там лежит то что надо. Для Linux почти тоже самое /home/user/Downloads

    Есть еще программный кеш для картинок, css/js/html e.t.c. Он в каждом браузере лежит по своему
    маршруту но обычно где-то в %UserProfile%/.hiddenFolder и имена файлов там не информативные. Хешируются
    по какой-то формуле чтоб хакеры и вирусы сами себя не нашли и не смогли передать управление.
    Этот кеш пользователем напрямую не управляется но просто надо знать что он существует.
    Если ты - активный сёрфер то можешь достаточно много накачать туда так чтобы создать проблемы
    для свободного места. Обычно где-то в настройках есть батон для чистки этих файлов.

    В режиме инкогнито браузер обычно гарантирует автоматическое удаление кеша после
    закрытия режима.

    По поводу айфона - не знаю.
    Ответ написан
    2 комментария
  • Вопрос по составлению резюме, может, с ним что-то не так?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Из резюме надо убрать такие слова как "не готов".
    Это можно потом выяснить в процессе устного общения. Но резюме должно быть более открытым чем закрытым.

    Для скиллов необходимо указать уровень (junior/middle e.t.c).
    И не стоит писать много скилов. Иначе складывается впечатление что
    кандидат - многостаночник и эникейщик.

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

    Английский надо поднимать хотя-бы до буквы B.

    Далее. Не для резюме. Для вопросов-ответов. Вот если ты написал что есть базовые знания back-end.
    То ты должен быть готов рассказать архитектуру вашего backend. И перечислить стек технологий.
    И нарисовать диаграммы. Тоесть любое дополнение или случайное слово в резюме будет
    поводом для "поговорить". Поэтому если ты точно-точно имел базовые знания - то расскажешь.
    Если нет - то лучше убери это слово.
    Ответ написан
    8 комментариев