Задать вопрос
  • Почему на Java не пишут игры под десктоп?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Проблема в реалтайме. Обычно когда речь идет об игре то на сцену выходит именно он.

    Для современных игр при скорости кадров 60 или выше очень важно чтобы основной цикл
    обработки событий приложения работал без задержек. Отклик. Геймеры - народ претензиозный.
    Очень быстро чувствуют дефекты игры. Какой им смысл покупать мышку выдающую импульсы
    управления с частотой 200 гц, когда вся игровая подсистема будет периодически фризится и лагать.

    Java не обеспечивает 60 fps просто в силу своей архитектуры памяти и GC. Это период цикла
    в 16 милисекунд. Хотя современные GC типа G1 имеют управляемый таймаут stop-the-world,
    тем не менее он не гарантируемый а скорее рекомендательный. Тоесть нельзя совсем
    застраховаться от пропусков кадров и продергиваний. Можно скорее говорить о процентиле
    чем о минимуме.

    Java хорошо работает в обычных веб-приложениях и в back-end процессах потому-что одиночный таймаут
    даже в 500 мс никто не заметит. В джобах и фоновых задачах - вообще плевать. Хоть несколько секунд.
    Главное чтоб суммарная средняя скорость обработки бизнес-операций была на высоте. С этим вроде
    все в порядке.

    Вот. Поэтому реал-тайм игры лучше писать на С++/C/Rust. В них есть более-менее гарантируемое понятие отклика приложения. Ну а игру типа квеста или походовой стратегии на Java вполне себе можно написать.

    Я не знаю как написан майнкрафт. Но я думаю что автор приложил огромное количество усилий
    чтобы GC в его серверной и клиентской части почти ничем не был занят. И такой подход
    годится для единичных игр но для майнстрима - скорее всего нет. Геймдев - это тоже бизнес
    и он не любит рисков. Нужно так чтоб рилтайм == рилтайм.
    Ответ написан
    9 комментариев
  • Вася вносит X руб.У него имеются номиналы:1,2,5,10,50,100,500. Сколько РАЗНЫХ купюр он отдаст,если начинает с больших? (как решить с помощью ДЕЛЕНИЯ?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Ну если к примеру сумма - 1531 рубль то для таких номиналов {500, 100, 50, 10, 5, 2, 1}
    нет необходимости вычитать 500-тку три раза. Можно поделить 1531 на 500 и посмотреть
    целочисленное частное. Если оно больше 0 - то 500 тку можно было использовать.
    Далее - остаток от деления на 500 даст 31. И так далее.
    Ответ написан
  • Как учить C++ если будешь знать С?

    mayton2019
    @mayton2019
    Bigdata Engineer
    то с какого аспекта или момента учить C++

    Нет такого момента или аспекта. Просто учишь и все. Языки похожи по синтаксису. Но начиная с каких-то 80х
    годов С++ стал отдельным форком и сегодня это два разных языка которые не должны быть под-множествами
    друг друга. Кроме С++ еще придется изучать и библиотеки STL/Boost и это отдельная тема.
    Ответ написан
    Комментировать
  • Проблема компилятора?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Если нет то можна нормальный гайд на установку этого компилятора?

    Не существует единого гайда на фиксацию проблем С++ разработки. Дело в том что сама профессия С++
    кодера предполагает решение таких проблем самостоятельно и каждый день. Издержки профессии
    так-сказать. Терпи. Учись. Или лучше выбери другую профессию.

    Что-же касается Windows-программирования то наверное не стоит в нем работать на GCC.
    Лучше брать Visual C++ как уже советовали выше.
    Ответ написан
    Комментировать
  • В строке все элементы в десятичной системе счисления заменить в шестнадцатеричной системе?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Это - курс молого бойца. Почти всегда первый урок информатики начинается с систем счисления.
    Десятичные. Двоичные. Хекс. Octal. Позиционные. Римская (непозиционная). Унарную можно
    рассмотреть как экзотику. Но имеюшую теоретически большую значимость.

    Работа со строками. Считай вторая лекция по информатике. Вот. Что еще тут добавить.

    Автор конешно лодырь. Вот. По условию дана строка. И на выход должна пойти строка.
    Такой контракт. У него в коде вообще нет ничего подобного. Написал какой-то ненужный
    огрызок. Надеялся что так помогут.

    Я-бы помогал удочкой рыбу ловить. Но готовую рыбу не давал-бы.
    Ответ написан
    Комментировать
  • Можно ли написать OS на Python?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Вопрос интересный. Из серии дискуссионных.

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

    Что такое ОС и вообще из каких частей она состоит? И какие к ней требования?
    Когда говорят о написании ОС - то обычно имеют в виду некий эксперимент или чью-то
    курсовую или дипломную работу в результате которой появляется нечто. И это нечто
    - имеет загрузчик. Загружается с флешки или диска. Содержит базовые средства
    ввода команд (шелл). Управляет хотя-бы сетевым интерфейсом и дисками. И умеет
    запускать хотя-бы 1 экспериментальную программу написанную для ЭТОЙ-же ОС.
    А иначе - какой смысл вообще делать ОС под которую нет программ.
    - обладает небольшими размерами. В самом деле. У вас же не Debian чтоб
    тащить пачку DVD дисков? Какие размеры кода генерит Python. Ну он вообще не генерит
    кода как такового. Хотя возможно с использованием CPython мы сможем собрать
    некий бинарник но здесь надо пообсуждать его недостатки. Размеры. И потенциальные
    уязвимости самой архитектуры. Если в коде существует точка где можно вызвать eval - то
    это уже потенциальное место для хакеров. Тут - требуется обсуждение с людьми которые
    чуть больше знают чем я в инфо-безопасности. Передам им слово.
    - обладает высокой производительностью. Близко стоит к железу и не имеет никаких
    посредников. Тоесть между ОС и железом не должно быть никаких прослоек. Какой длины
    стек технологий стоит между Python и железом? ХЗ. Пускай знающие пояснят. С моей точки
    зрения Python близок к Lisp или к JavaScript по духу и по идеологии. А надо быть близким
    к C++, Rust e.t.c. Мультизадачность опять-же до кучи. Ее эффективно можно реализовать
    только если код-быстрый.

    Из творческих экспериментов о которых я слышал. ОС - Beos. Была написана много лет
    назад на ООП языках как ОС для мультимедиа (?) или для чего-то там подобного. В настоящий
    момент считается мертвой.

    Еще была Singularity OS. Написана на ДотНете. Больше ничего о ней не знаю. Просто
    читал когда-то в журнале. Сильно удивился. Дай бох. Если так можно то хорошо. Кто знающие
    в теме - проясните ее статус на данный момент.

    Еще слышал о том что дедушка Никлаус Вирт в своё время тоже создавал ОС. На базе Оберон.
    Причем у него там были воплощены много его мечт и чаяний. Всякие модули. Динамические
    библиотеки. UI был абсолютной свой. Я смотрел на презентации. Не впечатлило. Хотя уважаю
    такую последовательность и упорство. Кто пользовался или устанавливал - просвятите.

    Любые клоны Линукс. Да они являются осями но их создатели не закладывали никаких
    усилий по разработке их ядра. Можно ли их рассматривать в данном топике? ХЗ. Я-бы не стал.
    Есть известная ОС BolgenOS которая стала мемом. Ее создатель очень много потратил на само-пиар
    и очень мало на разработку. Его усилия заключались во взломе всех текстовых надписей и копирайтов
    а также картинок и обоев в типичном дистрибутиве Линукс. Стоит ли это рассматривать в топике?
    Как по мне - неспортивно как-то. Нетворчески... Сюда-же до кучи Гентушников. Ничем особ значимым
    они не отличились.

    Любая встраиваемая в железо система по определению является ОС. Только пишется обычно
    на Си или Асме или каком-нибудь Форте. Но она обычно очень ограниченная и в ней нет ничего
    что-бы напоминало современные ОС. В них часто даже нет консоли. Поскипаем такие.

    Резюмируя. Свою ОС писать - хорошо. Познавательно. Но лучше не на Python а на Си. И подходить
    к вопросу нужно с глубокой идеей. Должны быть цели. Для чего. Чего мы хотим получить так чтоб
    не тупо копировать Linux. Нужно очень хорошо знать железо. Лучше - нестандартное. Там - больше
    будет пространство для маркетинга. Эльбрус там. Байкал. Или процессор GA144
    который создал Чарли Мур (дада тот самый) в котором куча микро-ядер и которые понимают
    Forth.

    Вобщем надо знать железо.
    Ответ написан
    2 комментария
  • Как реализовать Алгоритм Брезенхэма?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Брезенхем не использует вещественные числа. В этом его суть. Вещественные появляются просто в ходе доказательства его правильности. Но сама реализация - только на целых числах.
    Ответ написан
    4 комментария
  • Как развернуть колонку набок и в массив (Databricks/Spark)?

    mayton2019
    @mayton2019 Автор вопроса
    Bigdata Engineer
    Сам себе отвечаю.

    collect_list() и explode()

    - две функции которые делают нужные преобразования.

    Но практически - моя постановка изменилась и сейчас сводится к работе с JSON-arrays которые лежат
    в ячейках таблицы. Для них collect/explode мне не подошел. А подошли функции transform и cast.
    Часть из них доступны начиная со Spark 3.1.1 и Databricks 9.1.x-LTS Runtime. Поэтому надо модернизироваться срочно.
    Ответ написан
    Комментировать
  • -x^2 - положительно или отрицательно?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Если-бы это был C++ то я-бы выбрал такую форму
    pow(-x, 2.0)
    или
    -pow(x, 2.0)
    А для математика проблемы не существует.
    Ответ написан
    Комментировать
  • Почему Clang (с -O3) не векторизует данный цикл?

    mayton2019
    @mayton2019
    Bigdata Engineer
    В первом варианте был массив четверок int или массив 128 битных элементов.
    Во втором случае - два независимых массивка 64х битных элементов которые в памяти
    расположены достаточно далеко и для них скорее всего не нашлось такой векторной
    команды которая-бы адресовалась к паре 64 + 64.
    Ответ написан
    9 комментариев
  • Распарсить json через регулярку?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Для такого кейса
    [{"1":"1","2":"}2"}, {"2":"2","3":"3"},{
    есть старая задачка на собеседовании где надо парсить выражение со скобочками. По сути считать открывающиеся и закрывающиеся. В данном примере она - очень подходит. Только здесь есть одна ложная закрывающая скобочка.
    {"1":"1","2":"}2"}
    Исправить ее можно просто игнорируя неожиданное состояние автомата парсинга. Например двойка была неожиданной. И закрывающий bracer - тоже.

    Регулярки... ну такое. Для них нужна память под дерево разбора и если вы парсите терабайтный и битый JSON то много будет оверхеда.
    Ответ написан
    3 комментария
  • Быстро ли мое решение?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Измерение перформанса - это великое искусство. В данном конкретном приложении скорее всего узким местом будет не игры с массивами а конкретно печать на экране
    printf("%d\n", c[i][0]);
    поэтому из быстрых алгоритмов печать надо вышвырнуть. Или заменить ее на агрегацию результата или
    думать об асинхронных и параллельных операциях записи результата в файл если уж он так сильно нужен.

    Очень многие начинающие прокалываются на этом. Еще попробуй отказаться от индекса в массиве и заменить
    его на "подвижный" указатель по массиву. Часто бывает что умные компилляторы умеют распознавать такой шаблон но я-бы предложил написать две реализации и сравнить.

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

    mayton2019
    @mayton2019
    Bigdata Engineer
    Тут - надо шаг за шагом. Твой вопрос заключается сначала в стардартной формулировке задачи Эйлера.

    И потом с утверждения
    Я создал алгоритм, который сначала находит все делители чисел от 1 до 28123(хотя можно и 28123/1.5)

    Ты его проверил? Есть ли какой-то тест который может быстро проверить что ты не ошибся? Я на самом деле ничего плохого пока не хочу сказать по твоему методу решения, но надо как-то двигаться более доказательно. А то получается ты вывалил на голову бедных Python разработчикам какую-то математическую идею (кстати тегнуть надо топик) и далее задаешь вопрос именно по ошибкам Python - приложения.

    Я считаю нет, дорогой товарищ. Тут до Python еще далеко. Тут надо как в математике. Пристально следить за каждым statement и подвергать его сомнениям.

    P.S Здесь нижнее округление идет.
    int(math.sqrt(i)
    Это нормально? Может верхнее надо?
    Ответ написан
  • Как сделать перебор пароля?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Первое. Непонятно при чем здесь swing.

    Второе, эти детские наивные алгоритмы будут работать против такого-же наивного сайта. Тоесть его можно обсуждать но непонятно как результат этой работы представить как нечто практически полезное.
    Ответ написан
    Комментировать
  • Как считывать из бесконечного Stdout?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Читай не по строкам а по символам.
    Ответ написан
  • Почему при загрузке приложений и игр перезагружается пк?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Для GPU макс температура рабочего режима это порядка 90-100 градусов. Надо засечь за 1 секунду до перезагрузки не повышается ли она с 88 до предела.
    Ответ написан
  • Какой лучший паттерн для тестирования дао на GO?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Обычно там где танцует Go - там рядышком docker/kubernetes. Тоесть не проблема очень быстро поднять тестовую БД, наполнить ее данными и сразу прогнать все тесты по DAO.

    Иного способа протестировать DAO я думаю не существут. Смысл DAO - доступаться к внешним источникам данных. Если его мокать - то это уже не тестирование DAO а тестирование логики следующего уровня. Бизнес-логики и прочее.
    Ответ написан
    Комментировать
  • 1 розетка RJ45, а нужно подключить 2 устройства. Как?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Лет 20 назад использовали хабы. Это такие себе IP-ретрансляторы пакетов на все порты. Репитеры по сути. Работали медленно. Флудили в сегменте. Но для 10Мbit и DOS/Windows 95 их хватало. В лаборатории университетов ставили.

    Сейчас хабы как устройства умерли. Вместо них - только свитчи. Причем самое меньшее количество портов что я видел - это 4.
    Ответ написан
    Комментировать
  • Что имеется ввиду, когда говорят, что система должна обеспечивать персистентность?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Условно приложения делят на statefull и stateless. Большая часть приложений - statefull (это любые клиент-банки в базой и любые десктоп приложения имеющие конфиг или реестр конфига).

    Stateless - это ближе к AWS-lambdas, G-Cloud functions e.t.c. Вобщем ко всему что не помнит ни сессий ни предыдущих запросов.

    Persistence - это характеристика не приложений а скорее отдельных объектов. Если объект персистентен - то он сохраняет своё состояние в БД или в файловой системе. Когда сохраняет и как быстро - это тема отдельной дискуссии. Есть много технологий обеспечения персистентности. Hibernete например для Java. И просто базовый функционал сериализации. И еще вагон библиотек. Еще часто в вебе используется. Если веб-сессия персистентна - то она может путешествовать между нодами кластера и переживать падение нод. Разумеется то место куда сессия сохраняется должно быть всегда доступно. Может быть файловая система или NoSQL dbms.

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

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    В Java некрасиво получается если объявлять Function прямо в теле метода. Тебе проще инлайнить эту колбасу
    (a * x * x * x) + (b * x * x) + (c * x) + d
    Ответ написан
    Комментировать