>>3031294 → >Самый главный кек это написанный лично Владом меседжинг на базе постгреса. Естественно это всё тормозит неимоверно и его пытаются разогнать добавляя новые ноды. Причем этот ЧСВшный мудак и слышать ничего не желает про кафку. >Рест самописный на базе sparkjava.com >Для работы с базой Влад написал библиотеку которая выполняет jooq в одной транзакции. Тот ещё Франкенштейн. >Пробовали Котлин, и даже написали на нём пару сервисов. Но Владу он не зашёл, плюс плохо работал с Франкенштейном и его запретили для новый сервисов. >Влад лично пишет код, периодически смотрит пул реквесты. Однажды пришёл в мой пул реквест и высрал своё особо ценное мнение. >В целом очень гоняться за фичами, поэтому качество кода очень низкое. Плюс народ работает год - полтора и сваливает. Ебаааать. Впрочем, что ещё ожидать от кодомакаки из UBS, выпустившейся из шараги н-цатого эшелона.
>>3031266 → Наоборот же, the best practices, класс данных не должен наследоваться, это буквально структура без поведения.
> Приватный геттер Можно, только что проверил. Нельзя создавать getFoo() когда у тебя уже есть val foo, потому что геттер и так автоматически генерируется для каждой переменной.
>>3031144 → >Через енум - совершенно точно НЕ надо. Бля, какой енум, какие статик константы для референсных данных? >А как это надо было реализовать, по-твоему? Ну, есть же на худой конец стандартный java.util.Currency. Если уж так хотелось вписать своё имя как создателя, могли бы хотя бы тупо оттуда реализацию слизать: ... private static ConcurrentMap<String, Currency> instances = new ConcurrentHashMap<>(); private static HashSet<Currency> available; ...
>>3030921 → Так ты покажи результаты лучше, если это не предел. Там +-10 тулзов в топе, и все они имеют один и тот же результат в 7 миллионов с разницей в пределах погрешности. Объяснение этому феномену уже дали, это jit.
>>3031294 → Весёлый человек. Всегда хотел быть таким, только наоборот, как рыцарь зла и рыцарь добра, оба весёлые, но первый делает хуйню, а второй нет.
>>3031619 >Так ты покажи результаты лучше, если это не предел.
Ну смотри, ты написал: >>> предел железа на 7 миллионах ответов в секунду
Каких-ответов? Допустим, если у тебя процессор 3 ГГЦ и одна инструкция занимает один такт (для простоты возьмём 1 клок = 1 операция, хотя на самом деле сейчас это не так и десяток параметров влияет на скорость исполнения инструкций, может быть и десяток тактов, а может быть и несколько инструкций за такт).
Что в остатке? 3 000 000 000 / 7 000 000 = 428 инструкций.
Оппять же, это не ответы, а от балды прикинуте количество инструкций. Вот в них ты и должен суметь поместить ответ.
И всё это при условии что сеть, железо и операционная система не вносят свои задержки.
>>3031674 Ну так посмотри сурсы бенчмарка течемповереда, какие там ответы. Не важно, сколько там инструкций на один ответ тратится, суть в том, что по диаграмме явно видно упирание в предел на 7 миллионах в самых разных языках.
>>3031852 >Спарк это просто сахар поверх джетти Да, я уже почитал. Джетти - вещь. Я на нём делал разное, когда слова REST ещё даже в проекте не было, лол.
>>3032262 >>3032268 1Сники весьма неплохо зарабатывают - те, у кого душа лежит к такому. На экскаваторе хорошо пока молодой, и ничего не болит. А 1Сник чем старше - тем дороже стоит. И девки из бухгалтерии - все твои.
Глупый вопрос
Аноним03/02/24 Суб 00:49:26№303247732
Знатоки java, вопрос.
Я понимаю, что вопрос глупый, но он есть
Я знаю, что есть как минимум одна игра на java, однако у меня возник вопрос, где происходят вычисления и через что это может быть отрисовано.
Если кратко: Работа любого интерпретора( а виртуальная машина и есть интерпретатор, но в случае java это байт-код) занимает больше времени, чем аналогичная работа напрямую на железе(это даёт прирост в скорости одинаковых алгоритмов на c/c++ в сравнении с java/python/js/p4gl...). Я правильно понимаю, что для большого числа вычислений ради скорости используют нативные методы? Да и для работы с видеокарты тоже используются нативные методы, которые реализованы на си с использованием каких-либо vulkan/opengl?
>>3032477 >есть как минимум одна игра на java Есть хуева туча игр на java. В том числе в стиме.
Как это отрисовывается - долго рассказывать. Сама по себе джава вовсе не медленная. Стартует медленно, это да. А потом - всё ОК. Работа с видеокартой в наше время всегда происходит через драйвер. Который тоже многослойный сам по себе. И нет вообще никакой проблемы дёргать нативные C/C++ библиотеки из джавы. 3d графика в OpenGL на джаве была ещё хуй знает когда вообще.
На практике сейчас игры делают на libGdx. Пиздуй по ссылке и наслаждайся: https://libgdx.com
>>3032525 >Но чего бы тогда не писать игру на том же языке, на котором написаны эти библиотеки? А сам-то как думаешь, сынок? Или ты реально считаешь всех тех, кто пишет на джаве + libgdx глупее себя? Тебе годиков-то сколько? На ассемблере писал когда-нибудь? А opengl на си дёргал?
>>3032555 Это всё фигня. Деньги можно заработать, если есть мозги. Но, как раз с этим-то у тебя и не очень. >Но чего бы тогда не писать игру на том же языке, на котором написаны эти библиотеки? Редуцируя твоё утверждение, мы приходим к тому, что писать игры (и вообще что либо) нужно исключительно в машинных кодах (т.е. даже не на ассемблере). Что есть натуральный кретинизм. Что и требовалось доказать.
>>3032477 > Java > Интерпретатор > Занимает больше времени чем аналогичная работа на железе Во-первых, жаба использует JIT, который компилирует байт-код в машинные инструкции, тем самым практически нивелируя разницу между жабой и С++. Хотя при холодном старте программы JIT потратит какое-то время на компиляцию.
Во-вторых, любой код выполняется на железе. Хоть пайтон, хоть луи, хоть баш. Разница между интерпретируемыми языками и компилирируемыми состоит в том, что первые не оптимизируются компилятором, а вторые оптимизируются. Что такое оптимизация компилятора? Например, банальное удаление инструкций из кода, которые ни на что не влияют. В интерпретируемом языке каждая инструкция будет выполнена. В компилируемом только необходимые. Тоже самое касается циклов, тоже самое касается условий и так далее. Фактически компилятор переписывает твою программу в другую программу, которая будет делать самый минимум операций, чтобы достичь того же результата. Это и есть секрет почему компилируемые языки быстрее интерпретируемых, а не то что у одних инструкции выполняются на железе (CPU), а у других нет.
В-третьих, если не хватает производительности на жабе, то действительно могут писать бинарники на С и их вызывать через Java API в жабовской программе. Но здесь ровно та же история, что до этого. Ты можешь запустить на С компиляцию с аргументом О1, что даст тебе сверх-оптимизированный код для текущей платформы (и возможно не корректный, так как это уже игра в угадайку со стороны компилятора). На жабе ты настолько оптимизированный код не получишь.
>>3032648 >это и есть секрет Такое слово как "оверхед" ты когда-нибудь слышал, теоретик мамкин? Интерпретируемый кал медленнен именно из-за него, а не из-за маняоптимизаций. Спарсить строку инструкции, превратить в машинные инструкции и отправить эти инструкции процессору медленнее, чем отправить инструкции процессору сразу.
>>3032477 Нет, неправильно. Нативные методы медленные и каждый вызов занимает микросекунды, а джавовский код легко превращается в нативный житом. Используют их из-за того, что а) уже много кода написано нативно и нет смысла его переписывать на джаву б) мамкины теоретики на менеджерах, вместо того, чтобы спросить у умных людей, заставляют программистов страдать и писать код на нативной говнине, руководствуясь своими личными манявыводами о скорости нативного кода
>>3032661 Расскажи нам, как ты будешь JIT'ом работать с видеокартой. И чувакам из libgdx тоже расскажи, а то они там ебутся с нативным кодом, как дурачки.
>>3032673 Что значит, блять, "связать джаву и видеокарту напрямую"? Ты вообще понимаешь, что такое джава и что такое видеокарта? Вот с помощью libgdx и подобных вещей их и "связывают".
Была, в своё время, официальная Java3D. Ставилась как расширение виртуальной машины. Т.е. работало это на уровне VM. Но, оно так толком не взлетело. Хотя, даже что-то большое и энтерпрайзное на ней делали. Типа визуализации большого склада и т.п.
>>3032569 >Деньги можно заработать, если есть мозги. А с чего ты решил, что ты богаче? Может у тебя машина новее/мощнее или там... домик в Испании, которого у меня нет?
> мы приходим к тому, что писать игры Не, моё утверждение гораздо проще - игры писать не надо, их уже написали столько, что даже половину не пройти, если только играть.
И ещё мы приходим к тому, что кто-то всё равно будет писать игры, поэтому у анона всегда будет во что поиграть.
Ах да, тред же про Java. Она хороша там, где похуй на потребление ресурсов, но важны малое время разработки, безопаность и полный контроль над ошибками.
>>3032540 > Папа, я думаю что ты не пишешь на плюсах. Писать на плюсах это все-равно что жрать с помойки - хуйпойми какой синтансис разбавлен "вкусняшками" std++, qt, boost, а компиляторы это вообще отдельная песня.
>>3032848 >>3032852 Ребяты, С++ это такой ассембьер на стероидах с блэкджеком и шлюхами.
Как бы в соседнем треде не изъёбывались с новомодными стандартами и синтаксическим сахаром, но если программист не представляет какой код ему скомпилирует компилятор, то абсолютно до пизды на его знание стандартов - он хуёвый программист.
А вот про другие языки так сказать нельзя. В других языках это знание не обязательно (но приветствуется).
>>3032671 >>3032477 >>3032510 Мало того что куча игр на джаве, так еще больше игр на Юнити, который C#, который по сути та же джава и это почему-то никого не смущает. Если кратко, то после старта программы виртуальная машина обнаруживает часто используемые участки кода и держит кэш его машинного представления, по сути в моменте являясь программой на С. Посмотри например как быстро работает Rust (игра) - вот это игра на виртуальной машине.
Доброго вечера, дорогие анонсы. Аналитик данных в одном красном банке (не том, что первое место в рейтинге работодателей, скорее, на последнем), стек - python (pd + np + sns + scipy) / excel (vba / прочая ересь) / sql. Хочу свичнуться в джуву, начав с самых низов (и потеряв процентов 50 в ЗП) - ибо тут развития нет, да и загорелся что-то мыслью. Штудирую Хорстмана - "базовый курс java se 8", потом в планах - Крейг Уоллс : "Spring в действии". Думаю, для попадания на стажировку достаточно. Сегодня наткнулся на рекламу Javarush, где со всеми скидками предлагают год за 30% от фулл прайса. Как считаете, аноны, оно того стоит? Или лучше не терять время и деньги, идти тем путем, что распланировал выше? Спасибо)
>>3033125 Конечно покупай, лучше всего кредит возьми под это потребительский))) Пото станешь 600к на изичах после курсов зарабатывать)))) Сам после такси сразу на сеньку устроился))))))
>>3033125 Курсы редко стоят своих денег. Я бы продолжал двигаться в том направлении, что ты выбрал + начал бы выполнять слитые тестовые задания на Java разработчика в Sping, чтобы применять теоретические знания на практике.
>>3033191 Не, компания деревянная в плане разработки - своей команды магов-программистов нет, всё исполняется на аутсорсе. Поэтому развития в компании и не вижу. Спасибо за ответы, буду придерживаться прежнего пути + добавлю практики из заданий с собесов
>>3033125 У джавараша стоит покупать только курс по мавену. И Collection API. Тонкостей оптимизации конструкций вроде linkedList += ("Hello, world") тебе нигде больше не объяснят. А на собесе спросят.
>>3032477 Вот хороший пример, как это делается: https://github.com/CaffeineMC/sodium-fabric Это не пример хорошего кода и практик, тупая чсв пизда на разработчике в последнее время только гадит, практически не улучшая или даже ухудшая перформанс и ломая совместимость со всем, с чем только можно, но это пример того, как в принципе можно рендерить очень много и сложного на чистой джаве.
>>3033125 >>Аналитик данных в одном красном банке Красный это типа подментованый? втб что ли?
>>Хочу свичнуться в джуву Внутри конторы свичайся. Пока мидлом не станешь будешь наравне с тысячами таксистов после курсов биться за вакансию.
>>Думаю, для попадания на стажировку достаточно. ты студент чтоб на стажировку попадать? алгосы еще порешай, чтоб не обосраться на конкурсе.
>>Как считаете, аноны, оно того стоит? знание языка это от силы 20% из того что тебе надо для вката в джаву.
>>3033206 >>компания деревянная в плане разработки - своей команды магов-программистов нет, всё исполняется на аутсорсе. фарми стаж пока учишься, без опыта ты нахуй не нужен даже с знаниями. С годом опыта уже сможешь дойти до техсобеса.
>>3033328 Затем, что целевые цифры могут быть приемлемы для того, кто их нарисовал, но вызывать налезание глаз на жопу у всех остальных, или у некропукашеров, или у триллионзапросоввнаносекундщиков, или у 360-герцмониторщиков.
>>3033816 Тогда это косяк манагера или кто там рисовал цифры в ТЗ. Тратить время на оптимизацию если по ТЗ всё ОК это тратить время в пустую задерживая сдачу проекта.
>>3033833 Нахождение программистов в капиталистическом рабстве и невозможность ими высрать хоть какое-то своё мнение на большинстве оплачиваемых должностей вообще много чего портит. Я говорю про подход, зачем нужна сильная оптимизация.
>>3033838 Я понимаю тебя и уважаю твой подход. Тем не менее при разработке ПО нужно выбирать или качество или скорость разработки. И то и другое задаётся техническим заданием, согласовывается всеми сторонами работы и если с той стороны оказался некомпетентный человек, то это его проблемы. Если его проблемы это ваши проблемы (например, при разработке продукта), то тогда с вашей стороны менеджеры должны вписать требования к качеству.
В общем, когда разработчик на стендапе докладывает о работе, которой его никто не просил заниматься и при этом его таски никуда не двигаются, это повышает шанс того, что сроки будут профуканы, клиенты уйдут в другое место и вся команда не получит премию/пойдет на улицу.
>>3033843 Так я и не спорил со всем этим. Ты сказал, что нет смысла пересекать планку по оптимизации, но во-первых само по себе наличие планки не совсем правильно и скорее артефакт строгих сделок чем что-то к чему надо стремится, во-вторых большинство высеров про ненужность оптимизации идут в ответ на претензию в использовании медленных подходов которые и в скорости разработки никакого преимущества не дают и просто являются тупыми оправданиями.
>>3033849 > во-первых само по себе наличие планки не совсем правильно и скорее артефакт строгих сделок чем что-то к чему надо стремится Не стремится, но использовать как индикатор нужно/не нужно выделять время на работы по оптимизации решения. > во-вторых большинство высеров про ненужность оптимизации идут в ответ на претензию в использовании медленных подходов которые и в скорости разработки никакого преимущества не дают и просто являются тупыми оправданиями Они дают преимущество в скорости разработки, потому что разработчик пишет как хочет один раз алгоритм и идёт дальше. Он не тратит ни секунды времени на то, чтобы обдумать как написать алгоритм оптимизированным и это есть экономия времени.
Если ты решал когда-нибудь задачки на литкоде, то тебе должно быть это знакомо когда придумываешь какой-то алгоритм, так чтобы он просто корректно работал, получаешь результаты перформанса и видишь, что даже в топ 50 % не попал. Напрягает мозги, и через 30 минут рождаешь алгоритм, который входит по перформансу в топ 10 %.
Вот эти 30 минут помноженные на каждую фичу за год просуммируются в недели работы. Никакой проджект менеджер подобное не может позволить разработчику. Поэтому не важно оптимизированный или не оптимизированный алгоритм был написан, главное что он корректный, что он был написан быстро и что он попадает в требования по перформансу. Это оптимальный подход в разработке коммерческого продукта.
>>3033863 > Не стремится, но использовать как индикатор нужно/не нужно выделять время на работы по оптимизации решения. Есть ещё такая вещь как последствия изначально неверно сделанного вывода. Часто нельзя руководствоваться планкой, т.к. ещё никаких результатов цельной работы программы нет, а алгоритмы уже пишутся, и если будет написано говно, оно будет вонять вечно.
> Они дают преимущество в скорости разработки, потому что разработчик пишет как хочет один раз алгоритм и идёт дальше. Он не тратит ни секунды времени на то, чтобы обдумать как написать алгоритм оптимизированным и это есть экономия времени. > Если ты решал когда-нибудь задачки на литкоде, то тебе должно быть это знакомо когда придумываешь какой-то алгоритм, так чтобы он просто корректно работал, получаешь результаты перформанса и видишь, что даже в топ 50 % не попал. Напрягает мозги, и через 30 минут рождаешь алгоритм, который входит по перформансу в топ 10 %. Я скорее про более глобальные выборы, что не суммируются и прошивку человека, сразу задумывающегося про комплексити и долбоёба, шлёпающего поиск по еррей листу вместо хешмапы. При выборе языка нет оправдания "зато нашлёпаим быстра)))" скриптопараше, и в любом случае время на выбор языка тратится. Когда человеку говорят поменять лист на хешмапу, не надо копротивляться за маняскорость разработки и заявлять про то, какая ты верная псина своему кабану и как много фич успеваешь нашлёпать, или ещё чё-нибудь нерелейтед придумывать, а просто произвести оптимизацию дела 5 секунд.
> Вот эти 30 минут помноженные на каждую фичу за год просуммируются в недели работы. Никакой проджект менеджер подобное не может позволить разработчику. Поэтому не важно оптимизированный или не оптимизированный алгоритм был написан, главное что он корректный, что он был написан быстро и что он попадает в требования по перформансу. Это оптимальный подход в разработке коммерческого продукта. Ну и нахуй тут эти передёргивания? Неделя в год не стоит умножения скорости в десяток раз? И я уже говорил если т.н. бизнес требует здесь и сейчас и ему неделя не стоит, это проблема самого подхода бизнеса, когда программистов заставляют делать хуйню, и это не оправдание по теме.
>>3033868 > неделя в год Недели в год. Помноженные на 10 разработчиков и уже будет полгода разработки потраченного на оптимизации того чего никто не просил оптимизировать. > поиск по листу вместо хэшмапа Я про это по сути и говорил. Если у тебя этот список используется для хранения 10 элементов, то абсолютно всё равно какую структуру используешь. Аргумент, что хэшмапа ускорит алгоритм на 50 % когда латенси 2 микросекунды интересен лишь в спортивном программировании, но не в коммерческой разработке. > требование здесь и сейчас это проблема бизнес подхода И как твои успехи в объяснении этой мысли кабану/менеджеру/тимлиду?
>>3033677 Я каждую финтех парашу еще по логотипу что ли должен знать? Напиши прямо че за банк или вообще не пиши. А то ебать нагнал таинстсвенности "красный банк".
>>3033909 >>Недели в год. Помноженные на 10 разработчиков и уже будет полгода 10 недель это 2 с небольшим человеко-месяца, а не полгода. Просто одна фича из сотни ненужных. К тому же в энтерпрайзе это не выбор между оптимизация vs фича, это выбор между оптимизация vs дунасинг.
>>3033909 > Недели в год. Помноженные на 10 разработчиков и уже будет полгода разработки потраченного на оптимизации того чего никто не просил оптимизировать. А если подсчитать, сколько все жители планеты стоят на светофоре...
> Я про это по сути и говорил. Если у тебя этот список используется для хранения 10 элементов, то абсолютно всё равно какую структуру используешь. Аргумент, что хэшмапа ускорит алгоритм на 50 % когда латенси 2 микросекунды интересен лишь в спортивном программировании, но не в коммерческой разработке. Ну ты даун значит, что сказать, раз копротивляешься за говнокод из-за своей спеси.
> И как твои успехи в объяснении этой мысли кабану/менеджеру/тимлиду? Может по делу что-то высрешь?
>>3033909 Дауну уже объяснили, что всё что он высирает вытекает из того, что его кабан тупое дегенеративное хуйло, а он рабская скотопидорашка, которая делает всё чтобы побольше фич ему запилить, и что все аргументы основанные на этом никакого отношения к теме необходимости оптимизации и программирования в целом не имеют, но он продолжает талдычить одно и то же, барин сказал, барин сказал. Энтерпрайз головного мозга, хули.
>Сап двач, сегодня я пришёл к очевиднейшей и непоколебимой истине вселенского масштаба: оптимизация не нужна. Вот мой аргумент: мой кабан сказал, что оптимизировать не надо.
Почему, мистер шарпоеб, почему? Во имя чего? Что вы делаете? Зачем, зачем несете хуйню? Зачем продолжаете щитпостить? Неужели вы верите в какую-то миссию, или вам просто страшно признать свою неправоту? Так в чем же миссия, может быть, вы откроете? Это дуднет, аспнет, может быть, шарп, или вы боретесь за майкрософт? Иллюзии, мистер шарпомух, причуды восприятия. Хрупкие логические теории слабого шарписта, который отчаянно пытается оправдать свой ЯП — бесцельны и бессмысленны! Но они, мистер шарпоеб, как и Матрица, столь же искусственны. Только индус из майкрософт может выдумать скучное и безжизненное понятие «.NET»! Вам пора это увидеть, мистер шарпоеб, увидеть и понять! Вы не можете победить, продолжать борьбу бессмысленно. Почему, мистер шарпомух, почему вы упорствуете?
Посоветуйте материалов по сесурити в спринге. Жвт токены, корсы, csrf. Только в оф доку не надо слать. Она большая, много лишнего и примеры такие себе.
>>3034502 Эти задачи только на меня одного. Общий бэклог я не знаю какой. >>3034511 Тимлид, который накидывает следующую порцию после того как сделаю текущую. Пока делаю текущую появляется ещё парочка в бэклоге. Молодой продукт - горе разработчику. Я бы хотел как работники банка сидеть на каком-то древнем легаси и пилить одну тачку в месяц. Но я работаю на технологическом острие в моей заднице в молодом стартапе.
>>3034741 Просто на созвонах говоришь что "задача в процессе, пока разбираюсь" или "жду ответа от другой команды, пока не приходили". У нас так полкоманды делает.
>>3034741 >Эти задачи только на меня одного. Общий бэклог я не знаю какой. Ничего себе у тебя команда. Вы никогда общий бэклог не просматриваете, не грумите?
>>3034941 Смотрим, но достаточно редко, чаще всего я сам выбираю себе из него задачи + выбирает тимлид. На планинге задачи тимлиду засовывается в спринт + пара моих задач если лид считает, что его задач мало.
>>3037679 Тем, что под кнопочкой может находиться любая взбредшая в больную голову идеи команда вместо слин инсталла, ну или взбредшая тебе в голову, если ты настроишь это.
"Обратите особое внимание проблемам при работе в конкурентной среде (1000 RPS по одному кошельку). Ни один запрос не должен быть не обработан (50Х error)"
Запросы сохранять в кафку, а потом из кафки их забирать?
>>3038423 Классическая "экзектли ванс",сначала пишешь в базу,потом из базы пушишь,на успешную фиксацию от брокера вешаешь колбек на удаление из базы, ещё идемпотентный режим на продюсере включи чтобы о дублировании при ретраях не думать
>>3037032 Браток, можешь все таки рассказать? Вот хочется что-то выучить, кроме джавы. Но не хочется учить и потом никогда не использовать. Из того что я сам представляю. Ну это 1. Жс и тс с фреймворками. Ну фрон для бека мочь написать. Но фулстеком быть не хочется. 2. Котлин. Есть вакансии где часть сервисов на котлине. Но выглядит, как просто свистоперделка. 3. Питон. Ну это для сиайки вместо баша использовать или руками запустить скрипт на виртуалке или на локальном линуксе. Такие кейсы были у коллег, но у меня пока не было, чтобы нагугленного скрипта баша не хватило.
@Transactional это спринговское понятие или нет? Там же создаётся прокся и все. Если транзакция валится ее нужно роллбекнуть,а ведь не для всех операций можно сделать обратную. Мы ведь не можем вешать жту аннотацию на методы где внутри не происходит доступ к бд. Как это работает?
>>3038935 >@Transactional это спринговское понятие или нет? Сейчас уже добавили и Jakarta EE.
>>3038935 >Если транзакция валится ее нужно роллбекнуть,а ведь не для всех операций можно сделать обратную. Мы ведь не можем вешать жту аннотацию на методы где внутри не происходит доступ к бд. Как это работает? Это работает, только для тех операций которые поддерживают JTA. Обычно речь идёт только о базах, но может быть и меседжинг который подтверждает получение сообщения.
>>3040748 Дохуя. Система сборки, меньше бойлерплейта (с лобком только правда), скорость, библиотек много, майнкрафт, обратная совместимость, ещё туева хуча всяких более мелких вещей, которые записаны в моей пасте, от которой шарподебилов жопа на луну высылает, но которая у меня на компе, а я с телефона печатаю щас.
Но, как тебе уже сказали, иди нахуй, порвакатор. Для языкосрачей отдельный тред есть.
>>3040991 Я не могу. Надо распарсить аргументы функции из java сурс кода. Ту часть что между скобками. При этом аргументом может быть строка, символ, обычное число или переменная. Строки могут быть с конкатенацией и аргументы могут быть на нескольких строках.
>>3041010 Какая-то наркомания, хотя не звучит как что-то сложное. Проверяешь типа аргумента и засовываешь его в соответствующий парсер если я правильно понял проблему
>>3041217 Жавистов уже который год не могут под свой днищебюджет найти, вестимо. Не пойму только, почему они думают, что с шарпом такого не будет. Днищебюджет он и в Африке дно, даже шарпомухи на такое говно вряд ли сядут.
>>3041221 То что у них появились проекты или сервисы на шарпе значит что они от джавы отходят? У них до сих пор куча конф и блогов по джаве. На Хабре ведут дайджест по новинкам джавы. А вот то, что озон именно переписывал огромную часть логики что была на шарпе на го, они сами много раз писали.
Задумал освежить в голове алгоритмы. Прочитал про быструю сортировку, идея сама понятна. Посмотрел реализацию на Питоне, вопросов не возникло. А вот реализацию на Java, которая на известных сайтах указана (тут например: https://www.baeldung.com/java-quicksort) я понять не могу. Точнее, один момент прежде всего смущает. Зачем в методе partition(...) в конце всегда свопаются эти элементы, вне зависимости от того, больше они или меньше, чем pivot?
FPU просто пиздец какие быстрые. Я бы даже сказал, учитывая их скорость, можно сказать, что они работают мгновенно. Сложно представить себе ситуацию, в которой будет упор на FPU. Я думаю это не только потому, что сами вычисления выполняются быстро, но и потому, что нагрузка на FPU обычно не стакается при увеличении абстракций, а вот количество всех остальных инструкций легко может расти экспоненциально от криворукости разработчиков.
Пришёл я к такому выводу, прикидывая наилучшие входные данные для генератора чисел в распределении weibull-length и заметив, что на большом разрешении программка для семплирования подлагивает нехило. Решил добавить небольшой бенчмарк, и оказалось, что сама генерация занимает тут считанные мгновения, а время в основном тратится внутри javafx.
Есть небольшой проект на Spring Boot 3.2.x и Thymeleaf. Когда я запускаю его из IDE, главная страница (localhost:8080) отображается корректно. Когда же я собираю его (mvn clean package) и запускаю через java -jar, по localhost:8080 мне открывается что-то странное и не похожее на index.html внутри jar'а. Где может быть проблема?
Вот что мне выдал chatgpt. Обьясните пожалуйста как это работает, что на выходе получается, и как мне определить что на картинке, например что это цифра 1 ?
Создание сверточной нейронной сети (CNN) без использования сторонних библиотек с использованием картинки включает в себя несколько шагов. В данном примере я использую Java для простоты, но реализация без сторонних библиотек может быть сложной, особенно в реальных проектах. Пример ниже включает в себя один сверточный слой и подвыборку:
// Преобразование изображения в трехмерный массив private static double[][][] imageToMatrix(BufferedImage image) { int height = image.getHeight(); int width = image.getWidth(); double[][][] matrix = new double[3][height][width]; // 3 канала для RGB
for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { int rgb = image.getRGB(x, y); matrix[0][y][x] = (rgb >> 16) & 0xFF; // Красный канал matrix[1][y][x] = (rgb >> 8) & 0xFF; // Зеленый канал matrix[2][y][x] = rgb & 0xFF; // Синий канал } }
return matrix; } }
// Класс сверточного слоя class ConvolutionalLayer { private int inputSize; private int kernelSize; private int numKernels; private double[][][] kernels; private double[][][] outputs;
public ConvolutionalLayer(int inputSize, int kernelSize, int numKernels) { this.inputSize = inputSize; this.kernelSize = kernelSize; this.numKernels = numKernels; this.kernels = initializeKernels(); this.outputs = new double[numKernels][inputSize - kernelSize + 1][inputSize - kernelSize + 1]; }
// Инициализация весов (ядер) private double[][][] initializeKernels() { // Реализуйте ваш метод инициализации весов // Здесь просто случайные значения для примера double[][][] newKernels = new double[numKernels][kernelSize][kernelSize]; for (int i = 0; i < numKernels; i++) { for (int j = 0; j < kernelSize; j++) { for (int k = 0; k < kernelSize; k++) { newKernels[j][k] = Math.random(); } } } return newKernels; }
// Прямой проход (применение свертки) public void forward(double[][][] input) { for (int i = 0; i < numKernels; i++) { for (int j = 0; j < inputSize - kernelSize + 1; j++) { for (int k = 0; k < inputSize - kernelSize + 1; k++) { double sum = 0; for (int l = 0; l < kernelSize; l++) { for (int m = 0; m < kernelSize; m++) { sum += input[0][j + l][k + m] * kernels[l][m]; // Используем только один канал (например, красный) } } outputs[j][k] = sum; } } } }
public double[][][] getOutputs() { return outputs; } } Этот пример загружает изображение, преобразует его в трехмерный массив, применяет сверточный слой и выводит результаты. Заметьте, что этот код предназначен для иллюстративных целей и может потребовать доработок и оптимизаций для использования в реальных приложениях.
>>3042030 Ты хочешь реализовать распознавание изображений на жабе не используя сторонних библиотек?
Для твоей задачи есть OpenCV, но он тяжёлый. Думаю проще найти на гитхабе какую-нибудь обученную сетку на распознавание цифр, с бэкэндом в виде тензорфлоу, и жаба апи.
>>3042045 >хочешь реализовать распознавание изображений на жабе не >используя сторонних библиотек?
Именно.
Неужели настолько сложно переписать свёрточную нейронную сеть в обычный алгоритм ? Вот например перцептрон -
If (x == 0) { //then } else if (x == 1){ //else }
ChatGPT: Алгоритм работы сверточной нейронной сети (CNN) можно разделить на несколько этапов: ввод данных, прямой проход (прямое распространение), обратный проход (обратное распространение) и обучение. Давайте рассмотрим каждый из этих этапов подробнее:
Ввод данных:
Изображение: Входные данные для сверточной нейронной сети часто представляют собой изображения. Изображение представляется трехмерным тензором, где размерности соответствуют высоте, ширине и количеству каналов (RGB, например). Батч данных: Обычно данные передаются в сеть в батчах (наборах из нескольких примеров), что позволяет ускорить обучение и улучшить обобщение. Прямой проход (Прямое распространение):
Сверточные слои: Сначала входные данные проходят через сверточные слои, в которых применяются фильтры (ядра) к локальным областям данных. Это помогает извлечь различные признаки из изображения. Активации: Результаты свертки подаются через функции активации (например, ReLU), чтобы добавить нелинейность в сеть. Подвыборка: Чтобы уменьшить размерность данных и выделить наиболее важные признаки, применяется подвыборка. Полносвязные слои:
Вытягивание (Flattening): После сверточных слоев данные вытягиваются в одномерный вектор, чтобы передать их в полносвязные слои. Полносвязные слои: В полносвязных слоях каждый нейрон связан со всеми нейронами предыдущего слоя. Эти слои позволяют модели объединять признаки и делать выводы на основе всего входного пространства. Выходной слой:
Финальные прогнозы: Выходные данные с полносвязных слоев передаются в выходной слой, который генерирует прогнозы модели (например, для задачи классификации). Обратный проход (Обратное распространение):
Вычисление градиентов: На этом этапе вычисляются градиенты функции потерь по всем параметрам сети с использованием метода обратного распространения ошибки. Обновление весов: Веса сети обновляются в направлении, противоположном градиенту, с использованием метода градиентного спуска или его вариаций. Обучение:
Итерации: Процесс прямого и обратного прохода повторяется на нескольких итерациях (эпохах) с новыми батчами данных. Минимизация функции потерь: Целью обучения является минимизация функции потерь, чтобы модель могла делать точные прогнозы на новых данных.
>>3041237 >То что у них появились проекты или сервисы на шарпе значит что они от джавы отходят? Это большая копрорация - там будет всё. Есть вещи которые они купили. Условно это для примера, у меня нет инфы купили они права на некий сервис телефонии на .Net и теперь развивают свой телефонный спам на его базе. Понятно же что не будут переписывать на Java, а будут развивать и дальше. Но дальше будет бодание между .Net и Java командами, на чем начинать писать проект Х. Но в реальности это больше административные вещи, у кого больше аппаратный вес. На технологические преимущества платформ руководству похуй.
>>3042363 >If (x == 0) { >//then >} else if (x == 1){ >//else >} Перцептроны-то в реальных нейросетях не с бинарными значениями работают, а с диапазонами от 0 до 1 А теперь тебе нужно написать N-слоёв таких ifelse'ов, по M перцептронов в каждом слое, и каждый перцептрон соединить со всеми другими следующего слоя и хранить коэффициенты для каждой связи. Потом еще такие штуки как LSTM в дело вступают
>Неужели настолько сложно переписать свёрточную нейронную сеть в обычный алгоритм ? Ну явно сложнее чем взять либу, хотя как говорится бешеной собаке семь верст - не крюк, так что всё можно написать самому.
Держу все старые джаватреды в избранном до того, как они утонут. Это примерно 10 тредов. Вижу все новые посты по джаве и ни одного не пропускаю. В чём я не прав?
>>3031296 (OP) Какие есть видеоуроки норм на английском? Хотел курс с юдеми найти самый популярный, а на торрентах нету. Книги это конечно хорошо, но не хочется буковы читать. Хочется картинки смотреть.
>>3043336 Звучит несложно, но это своего рода зависимость. Если я правильно понимаю суть вопроса, вы проверяете тип аргумента и помещаете его в соответствующий парсер!
Сап джависты. Пришел за советом к сеньорам помидорам. Мне на работе дали в коим-то веке сурьезную задачу. Нужно сделать функционал который будет собирать статистику по потреблению сетевого трафика в терминалах. Проще говоря есть такая хуйня как на пикриле, она работает на дебиане, и в инторнет эта хуйня выходит через модем (смотреть на пик2). И собственно сам вопрос, как мне реализовать такой функционал? Есть одна идея, хочу раз в день отправлять ussd коды которые будут отвечать сообщением аля "осталось 110 мб на 11.02.2023" а на следующий день будет "осталось 60 мб на 12.02.2023". В итоге разница будет 50 мб, что и будет составлять потребление сетевого трафика. НО!
А есть ещё и другие способы? Какие-то новые утилиты ставить нельзя, терминалов куча, а ресурсов у каждого терминала мало.
>>3033959 В 2024-м Котлин стал бессмысленным языком. Всё тоже самое есть в Java. Впрочем, они пилят сейчас Kotlin Script (на замену Groovy). Как допилят - тогда может смысл появится его использовать. И то, иногда.
>>3037077 Я бы так не сказал. Например, очень не хватает возможность использования именованных параметров при вызове метода, вместо фиксированного жесткого порядка (как в Groovy или петоне).
>>3044205 >В 2024-м Котлин стал бессмысленным языком. Всё тоже самое есть в Java. И как мне заменить 100500 перегруженных методов, на один с дефолтными параметрами?
Приходишь на собес по джаве. Ехидный 15-летний тимлид просит назвать возможные состояния виртуального потока и чем PINNED отличается от PARKED. Твои действия?
>>3045931 Сегодняший, завернула как раз мне на работку, c которой вы вызвонили меня на линкеде >>3045977 Хороший ответ. Остаётся отвечать серьёзно или троллить до конца, почему раньше не переезжали, коллектив старый получается? В ближайшее время это потянуть пока не выйдет 23 LTS?
О великие эксперты, что можете вы сказать о курсе JavaRush ? При чем не тот который у них по подписке, а тот который обещает "За 12 месяцев до Junior" ?
>>3045329 >дефолты Как правило это хуевый подход. В питоне на большом проекте сейчас много боли из-за возможности в питончкие дефолты повесить. Ну и у нас еще DI через декораторы, это ужас полный.
>>3041222 >>3042630 Ну они до сих пор ищут скалистов себе. Даже курсы проводят ежегодно. Правда кому нахуй сейчас нужна скала? ФП в продовом коде с бизнес-логикой полностью провалилась как парадигма.
>>3047230 У них же бесплатные статьи и приложения. Да и в целом, только идиот лоботомированный будет платить за то чтобы за него структурировали информацию
>>3047303 >Как правило это хуевый подход. Любую технологию можно довести до абсурда, так что это будет треш.
Дефолтные параметры хорошо подходят для случаев когда есть много аргументов большая часть из которых опциональная. Например конфигурирование гсон парсера: var gson = new GsonBuilder().serializeNulls().setDateFormat("yyyy-MM-dd").create(); в джаве приходится использовать билдеры. А в котлине можно создать один метод или просто конструктор.
>>3047686 >>в джаве приходится использовать билдеры. А в котлине можно создать один метод или просто конструктор. Дефолтные значения нужны чтоб не создавать несколько перегруженных методов. Билдеры не про это.
>>3047754 Чееееел ты не понимаешь. 1. Дефолтные параметры без именованных аргументов - говно без задач. 2. И перегрузка методов и билдер могут использоваться для того чтобы инициализировать объект в ситуации когда часть параметров опциональна, но есть свои ограничения. Перегрузку нереально сделать если у тебя десяток параметров тупо все комбинации не перебрать или у тебя есть параметры одного и того же типа. У билдера таких проблем нет, но там сложнее указать какие параметры обязательные. А с дефолтными и именованными параметрами всё просто: обязательные параметры оставил без дефолта, рациональные с и всё.
>>3048934 >method(Object... args) И весь API переписать в стиле: >methodA(Object... args) Object >methodB(Object... args) Object >methodC(Object... args) Object
>>3049352 А в чем проблема с гарантией? Предлагаешь лоху ученический договор. Должен отработать 3 года за зп 50к. Если не справляется с тасками или хочет уволиться досрочно - платит штраф в 3кк (официально - полная стоимость обучения, которую якобы покрыла контора, так что все законно).
>>3049918 Затраты придется доказывать, обучение проводить реальными оплатами, какая то квалификация должна появиться после обучения. Не все так просто. Но для гарантии, действительно, достаточно предложить ООО Рога и копыта с переездом в Зажопинск за МРОТ, но и такого не будет.
>>3049918 >Предлагаешь лоху ученический договор. Должен отработать 3 года за зп 50к. Так тут кругом орут что вката нет, поезд ушёл, 40 тысяч откликов на вакансию, а ты тут на такую манну небесную нос воротишь, пиздец, Первые несколько лет 500 долларов - нормальная зп, в регионах так мидлы уже получают.
>>3051612 Учитывая что херкам поголовно похуй на гражданскую позицию анальников, и анальники это знают не понаслышке, унижаешься на сосаче только ты, коли так смешно порвался и не выкупил откровенный стеб анона выше.
>>3053961 Если нихуя не знаешь - Head First норм, он именно как учебник написан, а не просто справочник. Даже двачер поймет. Но если это не первый ЯП - будет слишком много воды.
>>3056259 Хорстман Java в первом томе мнопоточка, во втором стримы. Параллельное программирование в JAVA на практике. Брайан Гоетс при участии Тима Перлса, Джошуа Блоха, Джозева Боубира, Дэвида Холмса и Дага Ли
Пацаны, поясните, нахуя нужны sealed-классы. Не, я понял идею, но не понимаю, нахуя? Какой-то костыль на вид. Не понимаю, почему его так помпезно анонсировали как крутую фичу.
>>3056884 Единственный случай использования что я пока увидел - это использование таких классов в switch-е непосредственно, по сути как энум из классов
>>3056884 Этот >>3057034 прав. Я читал книгу где предлагали для этих целей создавать абстрактный класс где мы в конструкторе проверялось бы имя пакета класса наследника и если не совпадало с ожидаемым, то RuntimeException.
Теперь же просто пишешь sealed и кайфуешь от того как легче стала жизнь.
>>3057034 >>3058331 Так вы объясните нахуя нужно запрещать пользователю наследоваться? Для меня силеды это просто енум++, который поддерживает разные наборы данных при разном значении и смысл я в нём вижу только со свичами вместе. Во всех остальных случаях силед-пидорахизм только закладывает бомбу замедленного действия, которую придётся потом в будущем решать другими средствами, например, акцессвайденером.
>>3058340 >Так вы объясните нахуя нужно запрещать пользователю наследоваться? Например чтобы никто не строил библиотек поверх твоих библиотек и не ебал бы тебе потом мозг, что ты не можешь выпилить метод из интерфейса, потому что у них все на тебя завязано. >>3058340 >закладывает бомбу замедленного действия И в чем же бомба и будущие проблемы?
>>3058399 А в чём проблема библиотек поверх библиотек? Как бы все библиотеки поверх стандартной либы. А они поверх операционки, только которая уже работает напрямую с процессором.
>в чём же бомба Когда понадобиться необходимость расшириться, это будет невозможно.
>>3058340 Объясняю на дваче. Написал ты свою либу для двача, например вот такую
Либа v1:
interface Dvach { fun sendMessage() }
class Mailach : Dvach { override fun sendMessage() { println("Спасибо Абу!") } }
class Sosach : Dvach { override fun sendMessage() { println("Двач, есть одна тян...") } }
Клиент:
fun main(year: Int) {
val dvach = when { year < 2009 -> throw IllegalArgumentException("Вы молодые, шутливые, лучше сюда не лезьте.") year < 2016 -> Sosach() year < 2024 -> Mailach() else -> MyDvachWithBlackjackAndWhores() }
welcomeAgain(dvach) }
fun welcomeAgain(dvach: Dvach) { dvach.sendMessage() }
class MyDvachWithBlackjackAndWhores : Dvach { override fun sendMessage() { println("МЯУ") } }
___ А потом понадобилось добавить капчу, а то набегают боты.
Либа v2:
interface Dvach { fun sendMessage() fun enterCaptcha() }
class Mailach : Dvach {
override fun sendMessage() { println("Спасибо Абу!") }
override fun sendMessage() { println("Двач, есть одна тян...") }
override fun enterCaptcha() { println("666666") } }
Клиент:
fun main(year: Int) {
val dvach = when { year < 2009 -> throw IllegalArgumentException("Вы молодые, шутливые, лучше сюда не лезьте.") year < 2016 -> Sosach() year < 2024 -> Mailach() else -> MyDvachWithBlackjackAndWhores() }
welcomeAgain(dvach) }
fun welcomeAgain(dvach: Dvach) { dvach.sendMessage() }
// Class 'MyDvachWithBlackjackAndWhores' is not abstract and does not implement abstract member public abstract // fun enterCaptcha(): Unit defined in ord.example.Dvach class MyDvachWithBlackjackAndWhores : Dvach { override fun sendMessage() { println("МЯУ") } }
___ Поздравляю, ты сломал обратную совместимость своей либы и теперь юзеру на той стороны нужно переписывать свою имплементацию, чтобы соответствовать новому интерфейсу. И ему похуй, что в документации ни слова про этот интерфейс и что ты не предполагал его поддержку. Ты дал возможность его имплементировать? Дал. Ты обещал обратную совместимость либы? Обещал. Какого хуя анон тогда? Мы тебе бабки вообще-то платим и не маленькие, а ты такую хуйню учедил.
Как выглядит этот же код при использовании sealed интерфейса. Код либы не изменился кроме добавления модификатора, а у клиента ещё в версии v1 будет такое сообщение:
// Inheritor of sealed class or interface declared in package my.client but // it must be in package org.example where base class is declared class MyDvachWithBlackjackAndWhores : Dvach { override fun sendMessage() { println("МЯУ") } }
И он не сможет прострелить себе ногу, а тебе не придется трястись каждый раз когда нужно изменить интерфейс предназначенный только для имплементации внутренними классами.
>>3058340 > Так вы объясните нахуя нужно запрещать пользователю наследоваться? Сокрытие внутренней реализации. Чтобы стабилизировать апи, и менять реализацию, как угодно не завися от обратной совместимости.
>>3058486 1. Нахуй ты на котлине написал? Чтобы никто ничего не понял? 2. В большинстве случаев писать sealed чтобы запретить имплементировать интерфейс никто не будет.
>>3058529 > 1. Нахуй ты на котлине написал? Чтобы никто ничего не понял? Если ты джавист и не понимаешь базовый котлин, то ты какой-то неправильный джавист. > 2. В большинстве случаев писать sealed чтобы запретить имплементировать интерфейс никто не будет. Сколько библиотек написал?
>>3058644 Нахуя так делать,в джаве же кучу всего можно оптимизировать если не поддерживать обратную совместимость и делать язык с чистого листа,я сначала думал они наоборот облегчили джаву и нативных приколов завезли
>>3058652 Ну во первых они не ломали обратную совместимость, у них наоборот было целью её сохранить. Но >нахуя так делать Задача стояла не в решении наболевших проблем джавы, а в САЗДАТЬ СВОЙ ЕЗЫГ ПАНРАМИРОВАНИЯ. Как школьники видят шутки в тиктоке и повторяют их, постя другое видео с точно такой же шуткой. Если бы хотели решить проблемы джавы, то оставили бы оригинальный синтаксис джавы. Всё то, что авторы петухлина называют преимуществами, является вторичным и появилось уже после постановки цели создания своего говнеца.
Как этот ёбаный спринг учить? Попытался почитать хвалёный Spring in Action, но объяснения в стиле "вот так делай" мне чёт нихуя не нравятся. Есть какой-нибудь вменяемый гайд или книга?
Как нормально реализовать equals для неабстрактного класса, от которого можно будет наследоваться? inb4 сделать его final Нет, практической задачи нет. Я даже не вкатун, просто интересно.
>>3060692 Как для обычного final класса. Класс потомок должен переопределить equals и сначала вызвать equals родителя, если он true, то запускать свои сравнения полей. Если equals родителя выдает false, то возвращать false.
>>3060761 p.s. Вообще погуглил я твой вопрос меченый и выглядит всё так что есть два решения: 1) Сделать как я в прошлом посте, то есть нарушить принцип Липсков, что не есть гуд 2) Не нарушать принцип Липсков и сделать equals final в базовом классе (я лично ставлю лайк этому способу, так как никогда не наследуюсь от классов, только от интерфейсов)
>>3058660 Очевидно потому что главное в дажве - это огромная инфраструктура и наработки сделанные за все время ее существования. Сделай они отдельный язык - был бы еще один никому не нужный раст.
>>3061470 >Ну раст так-то активно используется в новых проектах. Тут главное почаще это вслух повторять, как манифестации, тогда точно станет реальностью
>>3061459 То есть ты взял одну единственную фичу языка: корутины. И в искусственном сценарии обнаружил, что они работают хуже чем треды. После чего ты заявил, что котлин принципиально медленнее чем жаба и срешь этим в треде уже хуй знает сколько времени?
В классе Container, что в awt, есть метод remove. Я допустим, что я имею такие строки кода:
Container a1=..., a2=...; a2.add(a1); И теперь вопрос: если использовать строку a2.remove(a1);, то 1) Будет ли существовать объект, на который изначально была ссылка a1? Ведь не было строки вида a1=null;
2) Что будет с объектами, вложенными в a1? Они будут удалены?
>>3061668 Ну расскажи тогда вот чего - деструктор когда вызывается? Когда сборщик мусора собирсет объекты без ссылок или когда число ссылок на объект обнуляется? Между этими событиями можнт быть значительный интервал времени.
>>3061679 Из C++ что-ли пришёл? > Когда сборщик мусора собирсет объекты без ссылок Это. Поэтому финализаторы deprecated и в принципе не рекомендуются к использованию.
>>3061642 > 1) Будет ли существовать объект, на который изначально была ссылка a1? Ведь не было строки вида a1=null; Да. > 2) Что будет с объектами, вложенными в a1? Они будут удалены? Нет.
1. Ссылка существует на стеке, сам объект в куче. 2. Пока ты не сделаешь a1 = null ссылка всё также будет существовать как и объект. 3. Когда ты добавляешь ссылку в список, то создаёшь вторую ссылку на объект. Теперь даже если ты сделаешь a1 = null, то объект никуда не исчезнет, так как осталась ссылка в списке. 4. Когда ты удалишь ссылку из списка и занулишь переменную a1, тогда GC сможет очистить кучу от объекта, так как на него больше нет ссылок.
При этом GC не факт, что сделает это сразу. Это может вообще никогда не произойти, но тебя как разработчика это не должно беспокоить, так как это уже детали реализации GC.
>>3061896 хз это все проекции комунити что где-то там что-то умерло итд, пишу код на скалке, ФП стек cats effect, http4s не представляю как вообще перекатываться на что-то другое теперь. Хайп безусловно ушел, но в любой технологии так.
Котлин выглядит как костальная поделка после скалы. Мало какой язык сравнится с экспресивностью и элегантностью скалы. Правда порог вката высокий.
Котлин мне видится Го в мире жвм лол, сделали простой удобный язык, но джава догоняет и хз нахуй он нужен по итогу.
>>3061954 Ну так скажи конкретно чем скала лучше котлина, в чем скала хороша то? Назови что-нибудь, что есть в скале, но нет в котлине. Такое чувство, что ты не пробовал котлин и просто воздух гоняешь
>>3062091 Самое главное в джаве 22 — стрим газонюхи. Наконец-то можно будет использовать стримы для операций длиннее 2 строк. А ещё выражения до super().
>>3062054 сильная система типов, high kinded типы, имплиситы, нормальный паттерн матчинг, иммутабельность по дефолту, в целом поддержка ФП лучше чем в котлине (не в ущерб ООП). Я правда не понимаю зачем котлин нужен, когда есть современная джава. Корутины, лол?
>>3062305 На джаве мобильные приложения не попишешь никак. Я к чему спрашиваю: мне предлагают по книге скалу выучить и вкатиться, наверное, в гос контору в бэк джуном
>>3062305 > Я правда не понимаю зачем котлин нужен, когда есть современная джава. Ну начнём с > Корутины, лол? А что, джавистов корёжит от моих базированных корутин? Дальше по тексту: - Nullable типы (нет, @NonNull не подходят, не врите себе) - Дефолтные значения для аргументов методов - Нормальные, не кастрированные лямбды - Scope-функции - Свойства (ну зачем же нам нужна такая бесполезная штука, у нас в современной джаве есть ломбок) - Нормальный : вместо дурацких extends и implements - Отсутствие дурацкого throws - Не нужно создавать отдельный класс, в который ты будешь писать статические методы - Уже много лет как есть интерполяция строк
А нахуя я собственно это пишу, джависты всё равно скажут, что нинужно.
>>3062582 Смысл в uint если всё равно на входе будут int, которые ты для своей части программы будешь также конвертит в uint с проверкой на положительность входного int?
>>3062582 А хули не ноешь, что нет even и odd? Разных ограничений числового пространства можно дохуя понапридумывать. На все типы не понаделаешь. Разве что нормальную компайл-тайм типизацию ебашить, но такого пока ни в одном языке не сделали.
>>3062539 > А что, джавистов корёжит от моих базированных корутин? Твоих? Ты к их созданию ни пальца не приложил. Ты просто залётный школьник, потребитель контента, уровня зрителя тиктока.
> нет, @NonNull не подходят, не врите себе. Яскозал!
> - Дефолтные значения для аргументов методов Доказывай, что нужно.
> - Нормальные, не кастрированные лямбды А что в джаве кастрированное? Явность лямбд? Пиздец, наглость перефорса на уровень шарпопетушни.
> - Свойствгетсетинитгет сет коко ко гет сет гет сет гет сет гет сет гет сет Ясн. Приходи когда хоть лучше чем в петушарпе будет, я даже не говорю про достижение уровня лобка (что сам не идеален).
> - Нормальный : вместо дурацких extends и implements > - Отсутствие дурацкого throws > - Не нужно создавать отдельный класс, в который ты будешь писать статические методы > - Уже много лет как есть интерполяция строк. Питухлиноссия — родина слонинтерполяций! Ну тут вообще шизофрения попёрла, долбоёб начал сгребать в кучу все отличия языков чтобы только побольше пунктов в своём говне было. Буквально всё это сделано разработчиками джавы специально в отличии от того, что было в древних плюсах, например, и что петухлинщики возродили из говнопепла, и является преимуществом.
А теперь что есть у джавы, чего нет у петухлина, даже учитывая его паразитирование на jvm: 1) Скорость 2) Нормальный синтаксис extends и implements вместо ебучего : 3) Нормальный синтаксис в принципе, а не обмазанное сокращениями говно с лишними словами 4) Универсальная интерполяция строк, а не нашлёпанное за 5 секунд говно не поддерживающее что-то больше дебаг мессаджей 5) Нормальный синтаксис лямбд 6) Проверяемые исключения 5) Как и в сравнении с петушарпом, отсутствие гетсет-клоунады
>>3062539 >А что, джавистов корёжит от моих базированных корутин? я не джавист, я на скале пишу же
всё что ты описал в скале есть только лучше, потому что её не пидорашки делали из жидбрейнс, а учёныев говне мочёные из швейцарского института.
Но несмотяр на всё то, что ты высрал - котлин это всего лишь надмножество джавы которое фиксит её проблемы, понимаешь? Когда джава реализует всё что ты написал (а она частично уже это сделала), то что будет делать котлин потом? Какая будет его selling-feature?
>пруфы я опущу глупые вещи типа пропертей, дефолтных значений и прочий говносахар и кейворды лол которые есть тупо везде уже, вот тебе самое главное, петух:
> Nullable типы (нет, @NonNull не подходят, не врите себе) наллабл типы это хуйня на постном масле которая делает систему типов менее sound Инт это инт, никакого null там быть недолжно, null вообще быть недолжно, сам Hoare это признал. Скала использует Option. java интероп понимает нулы ибо jvm, но в скале они не используются
>- Нормальные, не кастрированные лямбды
в скале ультра лямбды которые поддерживают Eta expansion, это когда ты метод можешь сделать лямбдой например, использовать их взаимозаменяемо
- Scope-функции какой-то сахарок бессмысленный, в скале есть мощные implicits, которыми можно добавить этот сахар через extension methods, но это самый простой юзкейс, вся мощь имплиситов раскрывается в либах типа cats, библиотеке тайпклассов (которые в котлине нормально и не сделать к слову)
Мне продолжать? Или может погуглишь сам, чмондельс?
Что вообще на петухлине хорошего написано? погугли либы в скалке типа cats, zio, shapeless, akka есть что-то подобное у вас? Или хоть что-нибудь кроме КОРУТИН лол
Котлину далеко до скалы, а скоро будет и до джавы далеко
>>3062906 Просил без верчения жопой, а сам вертится как уж. Петухлинщики что-ли как шарподебилы не принимают всё что не с лопаты скормлено, а сделано комьюнити?
>>3062909 Я просил показать где грааль это делает, но жопа у тебя завертелась со страшной скоростью и из 3х ссылок на грааль была только одна. Почему так?
>>3062917 Ну мало ли ты что там попросил показать, ты ещё попроси показать как твоя мамаша не блядует, я тоже не смогу. По теме что-то будет или сливаешься?
>>3031296 (OP) Почему на жаве выходит такой многословный код? Банальные вещи требуют тысячи строк кода, которые выдавливаешь из себя целый месяц, а потом два месяца дебажишь нюлы.. Хваленные фримверки делают только хуже и код мало того что сложно читать (его дохуя выходит) так еще он и тормозит. Смешно говорить, но дернуть хатэтэпе ручку через спрэнг - 100-150 мс на локалхосте, лал))
>>3062908 >>Инт это инт >>null вообще быть недолжно >>Скала использует Option. А в чем принципиальная разница? Что опцион, что нул - все равно надо проверить есть ли там содержимое или нет.
Чем петухам на котлине и шарпомухам не нравится джава? Ведь относительно других ЯП именно джава объективно великолепна с минимум недостатков и богатой экосистемой.
>>3063290 Почитай про type safety и type system soundness. Если у тебя каждый тип может быть наллбл сложнее рассуждать о программе как о типобезопасной. Но котлинмакакам думаю не до таких материй, у них же есть КОРУТИНЫ!
>>3063430 Функция которая умеет принимать сколько угодно параметров вида int, string, int, string .... Например, dup(1, std::string("aboba"), 2, std::string("xyz"), 3, std::string("a")) выведет abobaxyzxyzaaa
Не джавист, но выглядит as simple as передать просто тайп параметр и всё, не? В скале по крайней мере изи %%или в джава дженерики както иначе работают?%
>>3063517 T... - parameter pack, а не просто типовой параметр >>3063518 Ну вот в Java просто varags сахар над передачей массива, на сколько я знаю. В плюсах нет. В плюсах он как бы раскрывается.
>>3063282 жабадебилам уже over 99999 раз объясняли почему... Нет смысла, одни и те же маняврирования. Одно "нинужна", другое "уже есть в жабе, жаль только, что с хуевым синтаксисом и только с n-ой версии, когда в котлине сразу всё есть с нулевой" Я готов согласиться с единственным аргументом - жаба побыстрее.
Конченые ублюдки блядь больные ебанаты используют сука интерфейсы для доменных моделей. Конченые блядь олигофрены предлагают сука ебануть блядь ебаный интерфейс shape и реализовывать его в сущностях круг и квадрат. Конченые блядь ебанаты ебаные ублюдки почему они свободно выкладывают это на ютуб мрази твари уроды
>>3063540 Забыл упомянуть про то, что любят оправдывать отсутствие свойств ломбоком, который не является частью джавы. Это просто костыль, который можно для любого языка запилить, но никто этого не делает, т.к. там блять ЕСТЬ эти самые свойства и всякие хуёмбоки и guava там просто без надобности, всё это есть в самом языке. Когда мне пришлось в говне ковыряться на джаве, я охуел с того, что для нормальной работы с языком нужно минимум 3 библиотеки добавлять, это пиздец
>>3063559 Ну и конечно кайфанул с того, что я не могу нормально с коллекциями работать, т.к. версия жабы старая, и её нельзя было поднимать. Плюс проблемы были с тем, что нет опциональных параметров именованных и нормальной проверки null. Какой же кайф везде проставлять аннотации, писать без экстеншнов в 2 раза больше кода, чем обычно, вот это копиум. И в этом же проекте можно было писать на котлине без проблем, с лямбдами, экстеншнами, коротким синтаксисом, со всеми удобствами...
>>3063276 Я так понимаю, суть в том, что опцион прилетает редко и там, где чётко заявлено в сигнатуре метода, в рамках стандартной логики программы, а нулл вылезает как прыщ на жопе там где его не ждёшь совершенно. В этом есть по сути логика, хоть и опционы имеют опасность той же проблемы, что и проверяемые исключения, со временем оказаться renundant.
>>3063436 А нахуя? Это как минимум нарушение сингл респонсибилити. На джаве просто делаешь dup(1, "aboba")+dup(3, "govno") немного не так будет, на джаве строки иммутабельные и такое совмещение перформанс убъёт, надо это через стринг билдер делать, но для примера сойдёт.
>>3063559 >>любят оправдывать отсутствие свойств ломбоком, который не является частью джавы Частью джавы являются рекорды, где можно получать поля по одноименному методу.
А писать гет/сет для каждого класса в джаве - это и есть костыль и каргокульт. Петушарперы прибили это гвоздями к языку и считают себя не говноедами теперь.
Повторяют ошибки джавы из 90-х, когда в нее тащили хайповое говно типа гоф паттернов. Мода на гет/сет пройдет, а у них останется этот кусок говна в языке. Или сломают обратную совместимость, чем обрекут код на легасность. Переписывать надо будет так много, что проще будет остаться без обновлений а если переписывать - то уже на го.
>>3063569 >>не могу нормально с коллекциями работать, т.к. версия жабы старая, и её нельзя было поднимать Версии меньше 8 сейчас уже не найдешь, а там все это есть.
Можешь еще поискать паскаль и жквери для полноты ощущений программирования начала 00-х А то что тебе дали ковырять какой то копролит и не позволили что то менять - многое говорит о тебе как о специалисте.
>>3063925 Да ты просто сравни чатик котлина (kotlin_lang) и чатик javastart с залетной гречневой быдлятиной. Хуже я видел только в чате начинающих питонистов.
>>3063963 Зашёл в калфу петухлина, увидел анальные правила для утешения чувства собственной неполноценности у пидорашей мочерации, в которых даже запрещено спрашивать вопросы если они имеют хоть какое-то отношение к джаве (лол) и ещё простыню всяких запретов и нипущаний, посмотрел на аву главпетуха, увидел заплывшего скуфа-чурку, пролистал безмерный список всяких субчатов, увидел "флудилку-курилку", лол, блядь, ахаха.
Зашёл в калфу джавы, сразу открылся чат, в котором идёт адекватная дискуссия, и из информации о чате никаких правил и только совет как правильно задавать вопросы чтобы на них можно было ответить.
>>3063907 ну да, когда надо, так ломбок дохуя крутой и нужен, КРУЧЕ ШАРПА, но когда вас ткнули носом в то, что ломбок - костыль для джавы, так сразу ломбок говно и вообще "НИНУЖНА", вот это маняврирования, ещё скажи, что guava никто не пользуется.
Рекорды в джаву завезли, вот это да. Угадай откуда спиздили, и напиши версию, с которой я смогу этим пользоваться плиз.
>А то что тебе дали ковырять какой то копролит и не позволили что то менять - многое говорит о тебе как о специалисте. Хуя ты высрал. Даа, именно поэтому...
>>3063559 >который можно для любого языка запилить но почему-то ни для шарпоговна, ни для петухлина не запилили, и шарподебилы продолжают шлёпать бойлерплейт...
Аноны, приветствую. Пост по теме и одновременно нет. Суть изложу кратко, имеем игру на жаве именуемой Project Zomboid. Пытался сам в джаву, но не смог, поэтому ищу энтузиастов по созданию и развитию одного проекта. Приветствуются аноны, кто имел дело с майнкрафтом. Не на добрых началах, все обсудим в телеге @kokdilla
>>3064198 Ну так ломбок сейчас нужен, а потом станет не нужен. С появлением рекордов уже от многих его фич отказался.
>>guava никто не пользуется. У нас апач комонс вместо гуано. В петушарпе выбора не дадут - жри что дали.
>>Угадай откуда спиздили Взяли @Value из ломбок и довели до ума. Никаких гет/сет там уже нет.
>>версию, с которой я смогу этим пользоваться плиз. 17+. Если на завязан на специфичных либах - то 11 легко апается до 17 или 21. С 8 - могут быть проблемы (а могут и не быть)
>>Хуя ты высрал. Даа, именно поэтому... Любой джавист просто апнет версию хотя бы до 11. А шарпомухе видимо по кайфу ковыряться в протухшем говне.
>>3064329 А что жирного? Ответ прост: потому что макаки не могут в архитектуру. Надо читать Буча, GoF и другие умные книги, как правильно писать код с использованием ООП. Для сокращения кода есть все необходимое в Lombok (а чего нет, можно самому описать аннотациями).
>>3064481 Посмотрел в википедии: >После произошедшей эпидемии огромная часть населения округа заразилась неизвестным вирусом и превратилась в зомби Когда сценарий писали анальники, у которых абсолютно отсутствует фантазия... У меня бы, например, в зомби превращались зумеры под влиянием соцсетей.
Майкрософто-лахта что-то совсем больше не старается. Где вбросы про async/await, где табличка с соснули.рф? Асинхронность в Спринге включается @EnableAsync
В методе readResponse, когда убираю вызов readBodyData (59 строка) и раскомментирую строки 49-58 - не хочет выводить тело Web-страницы. Как исправить, чтобы работало корректно с учетом нужной кодировки?
>>3065403 Да, это со 2й джавы. На самом деле это дефолтные методы - костыль. Интерфейсы должно задавать правила взаимодействия с объектом, а не логику.
>>3065979 1. Тем, что теперь твой интерфейс это и интерфейс и абстрактный класс 2. Любишь вместо существующего языка использовать выдуманный язык? Потому что именно так это выглядит со стороны когда разработчик вместо конвенционального способа проектирования программы начинает изобретать свои собственные. И конвенция говорит, что интерфейсы не содержат в себе имплементацию.
Я так понимаю твой код никто никогда не ревьюрил, потому что такие вещи не знают только программисты-одиночки.
>>3065995 > и интерфейс и абстрактный класс Ты еблан, лол? По такой логике кроссплатформенность тоже нарушает мантру, ведь и шинду поддерживает и пердоликс. Или там иерархия классов, и Shape и Rectangle и Square.
> Любишь вместо существующего языка использовать выдуманный язык? Потому что именно так это выглядит со стороны когда разработчик вместо конвенционального способа проектирования программы начинает изобретать свои собственные. И конвенция говорит, что интерфейсы не содержат в себе имплементацию.
> Я так понимаю твой код никто никогда не ревьюрил, потому что такие вещи не знают только программисты-одиночки. То есть из твоих аргументов только "здесь так принято" и "ты не программист"?
>>3065995 >>разработчик вместо конвенционального способа проектирования программы начинает изобретать свои собственные. спринг так и поступает, за чистым ООП на джаве - это к бугаенке.
>>3066003 > Ты еблан, лол? По такой логике кроссплатформенность тоже нарушает мантру, ведь и шинду поддерживает и пердоликс. Или там иерархия классов, и Shape и Rectangle и Square. Ты хуйню какую-то лишённую логики спизданул. Попробуй ещё раз. > То есть из твоих аргументов только "здесь так принято" и "ты не программист"? Почему ты пишешь на русском языке? Говори на идише, иди против системы. В коде же ты идёшь против "здесь так принято", так давай, здоровайся с людьми носом, переходи дорогу на красный и ходи задом - следуй своему инженерному чувству анон, нахуй эти правила.
>>3066014 > Ты хуйню какую-то лишённую логики спизданул. Попробуй ещё раз. Слив принят.
> Почему ты пишешь на русском языке? Говори на идише, иди против системы. В коде же ты идёшь против "здесь так принято", так давай, здоровайся с людьми носом, переходи дорогу на красный и ходи задом - следуй своему инженерному чувству анон, нахуй эти правила. То есть ты подтверждаешь что аргументов у тебя помимо "здесь так принято" нет и объяснить зачем это нужно ты не в состоянии?
>>3065392 Ты используешь BufferedReader для паркинга хедера. Но проблема в том, что BufferedReader буфферизирует чтение кто бы мог подумать, да?. Соответственно он почти гарантированно вычитает лишние байты из SocketInputStream. И дальше твой ридер для тела запроса будет читать его с середины.
Тебе надо отказаться от ридера для заголовка. Читай побайтово пока не встретишь \n дальше байты в строку и парсить. Когда закончишь с заголовком, можно будет создавать ридер поверх того стрима из которого ты читал.
>>3066014 >>здоровайся с людьми носом, переходи дорогу на красный и ходи задом Тебе скажут что это нерушимые принципы - и ты будешь так делать. Адекваты пошлют нахуй эти правила и будут делать так как удобно им, пока ты будешь визжать что это неправильно и так делать нельзя, ведь бог накажет!!!!
>>3066149 > и будут делать как удобно им > буквально первое, что написано в любом руководстве как писать хороший код: пишите так, чтобы другие легко могли понять написанное Что ты забыл в программаче?
Предстоит увольнение с текущей работы, на которой проработал 3 года (была первая работа в ИТ) как разработчик. Дайте советов мудрых, как подготовится к миддл собеседованию. Возможно есть у кого полезные ссылки. Я погуглил, но как-то по крупицам всё разбросано.
>>3066154 >>первое, что написано в любом руководстве как писать хороший код: пишите так, чтобы другие легко могли понять написанное Я про это и написал, принципы идут нахуй если они идут вразрез с удобством и понятностью. Иногда они просто устаревают, но долбоебы вроде тебя продолжают дрочить на какую то книжку из 90-х.
Как профилировать джаву? Вот например у меня есть игра на джаве (копрокубы), и при рендеринге каждый 5-10 кадр рендерится в 4 раза дольше, чем нормальные кадры. Меня это немного доебало и я хочу избавиться от этого. Я могу например найти метод рендера кадра, и после сборки данных профилировки фильтровать результаты, чтобы сравнить, чем занят движок в те микростататтеры, и чем при нормальном рендеринге, и попытаться это как-то распараллелить. Но как собрать данные профилировки, чтобы была выдача, что подметод залупа тратит 70% времени исполнения профилируемого метода, говно 25%, анус 5%?