Сохранен 138
https://2ch.hk/pr/res/2511502.html
24 декабря Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!

Java Thread #119 /java/

 Аноним 11/11/22 Птн 18:20:23 #1 №2511502 
image.png
image.png
image.png
image.png
Шапка: https://github.com/EightM/JavaBackendStartGuide

Предыдущий: >>2468422 (OP)
Аноним 11/11/22 Птн 18:27:51 #2 №2511514 
Великий тред великого языка
Аноним 11/11/22 Птн 18:27:58 #3 №2511516 
джава лучше шарпа
Аноним 11/11/22 Птн 18:32:08 #4 №2511518 
Шапка не нужна.
Аноним 11/11/22 Птн 18:37:22 #5 №2511527 
>>2511475
20 звезд? Без сслыки на мавен? Это че за хуйня?
Аноним 11/11/22 Птн 18:37:46 #6 №2511528 
Вы че тред удалили ебанутые?
https://stackoverflow.com/questions/31059325/json-templating-in-java
На вопрос ответьте.
Аноним 11/11/22 Птн 18:40:38 #7 №2511529 
>>2511528
Тебе там с 2015го года все разъяснили, хули те еще надо?
Аноним 11/11/22 Птн 18:41:27 #8 №2511530 
>>2511528
Чем тебе Freemarker не угодил?
Аноним 11/11/22 Птн 18:44:38 #9 №2511533 
>>2511530
Не используется.
Я в общем уже додумался, надо выдернуть ту хуйню, которой спринг конфиги грузит и парсит.
Аноним 11/11/22 Птн 18:48:35 #10 №2511538 
>>2511533
Используется.
Аноним 11/11/22 Птн 18:51:42 #11 №2511542 
>>2511538
Ты еблан? У нас не используется.
Аноним 11/11/22 Птн 18:56:49 #12 №2511545 
>>2511542
У вас одна из таких контор, где лид запрещает использовать rabbitmq, kafka и прочие библиотеки с фреймворками, потому что "нет, мы не будем это использовать, я решил)))) просто напиши очередь поверх базы и там просто дергай запросами))))))"?
Аноним 11/11/22 Птн 19:04:06 #13 №2511552 
>>2511545
Нет, просто у нас используется другой шаблонизатор, и то не везде. Дебил.
Аноним 11/11/22 Птн 19:14:13 #14 №2511556 
>>2511552
Грасеас? Грасеас, это ты?!
Аноним 11/11/22 Птн 19:18:42 #15 №2511562 
>>2511552
Так используй другой шаблонизатор.
Аноним 11/11/22 Птн 20:41:15 #16 №2511624 
Как создать каталог с установленным паролем ? Или что бы нельзя было удалить его ?
Аноним 11/11/22 Птн 21:03:37 #17 №2511653 
image.png
Захожу раз в полгода сюда просто чтобы посмотреть на умственно-отсталых итт и поднять свою самооценку.
Спасибо, за последние 3 треда понял, что я не так уж и плох.
Аноним 11/11/22 Птн 21:06:09 #18 №2511660 
>>2511562
🤡🤡🤡
Аноним 11/11/22 Птн 21:55:50 #19 №2511716 
>>2511624
Средствами java.
Аноним 12/11/22 Суб 01:21:28 #20 №2511820 
Есть тупой вопросец. У меня есть какой-то спринг бут проект,решил написать для него редми. У всех редмишек которые я видел есть инфа про проект и инфа как запустить через командную строку. Так вот,как предполагаемый пользователь сможет запустить мой проект если у него не установлен мавен? Несмотря на то что в проекте он есть при попытке ткнуть mvn clean install терминал скажет ему что mvn не является внутренней или внешней командой.
Аноним 12/11/22 Суб 01:32:58 #21 №2511822 
>>2511820
Мавен враппер положи
Аноним 12/11/22 Суб 01:42:53 #22 №2511824 
>>2511822
Настраивать надо или закинул и хуй забил?
Аноним 12/11/22 Суб 01:50:46 #23 №2511826 
Бля, прислали оффер из другой компании, а я до сих пор числюсь в штате в своей аутсорс галере, сижу на бенче. Седня читал труд договор - там написано, что типа 2 недели надо отработать. И че, мне надо будет 2 недели на бенче сидеть? Так оффер тогда может уйти. Чё делать то?
Аноним 12/11/22 Суб 03:07:03 #24 №2511845 
>>2511826

Вы во время собеса переход вообще не обговаривали чтоли? Или ты напиздел что без работы сидишь? Две недели на старом месте отработать --- стандартная практика так то, и офферодатель, если он серьезен, отдает себе в этом отчет.
Аноним 12/11/22 Суб 03:10:59 #25 №2511846 
>>2511824
Второе.

Просто говоришь из корня проекта `mvn wrapper:wrapper` и закидываешь в гит все, что насоздается.
Аноним 12/11/22 Суб 03:26:14 #26 №2511850 
>>2511846
Но если в проекте есть зависимости на самописные артефакты из внутреннего нексуса, хуй че соберется без конфига мавена.
Аноним 12/11/22 Суб 03:32:32 #27 №2511852 
>>2511850
Ты определись для начала --- для кого ты ридми пишешь. Если для разрабов, которые будут с тобой продукт девелопить, то им ты опишешь как и к какому репу им в settings.xml креденшелы прописывать. Если для пользователей, то камон --- ты че, серьезно хочешь бедняжек заставлять билдить софтину с нуля? Пощади, чай не все родились гентушниками. Чай собери им софтинку в пакетик то, и пакетиком поставляй. Хоть бы спрринг бут мавен плагином упакуй все зависимости в один джарник.

Ну а если ты серьезен в своих намерениях, и хочешь чтобы читатели твоей ридмишки билдили твою пепяку через мавен, то ты впоролся. И проблема вообще не в мавене.
Аноним 12/11/22 Суб 05:33:46 #28 №2511864 
>>2511845
А может быть такой вариант, что меня сразу отпустит нынешний кабан без всякой отработки? Или это прям обязательно? Я ведь даже ни на каком проекте не состою. Кабан тупо мне за 2 недели заплатит за то, что я буду сидеть на скамейке запасных
Аноним 12/11/22 Суб 14:21:13 #29 №2512065 
>>2511864

Я канеш не юрист, так что анон если че поправит, но вроде как двухнедельный срок регламентирован ТК: http://www.consultant.ru/document/cons_doc_LAW_34683/aed7d03df679e3376974dadd131b899dc6966650/

У кабана скорее всего от твоей инициативы пригорит даже если у него на тебя рабочих планов нет. Ему со своей стороны тоже ряд процедур нужно сделать, а ты ему фактически срезаешь срок с двух недель до нуля.
Аноним 12/11/22 Суб 17:24:16 #30 №2512191 
Что нужно сделать , что бы контроллеры обрабатывали GET запросы с телом ? Я знаю что нужно заменить на пост и тогда заработает , но чисто логически это будет не верно. Ведь метод который подвешен на этот контроллер ничего не создает , а только выдает информацию по запросу. Записать все в параметры тоже не вариант , по тз на котроллер приходит именно json.
Аноним 12/11/22 Суб 17:32:56 #31 №2512198 
>>2512191
POST семантически ничего не создаёт, он просто запускает некий серверный обработчик. Обработчик может хоть выполнять поиск, хоть сохранять данные. Его используют для любых действий, не вписывающихся в концепцию круда.
Вот PUT да, должен создавать ресурс.
Аноним 12/11/22 Суб 17:57:39 #32 №2512209 
>>2512198
В тз впринципе не сказано , что я должен использовать гет. Я так просто предположил , но раз ты говоришь что мое предположение не верно я забью хуй и напишу POST. Спасибо
Аноним 12/11/22 Суб 18:27:29 #33 №2512218 
изображение.png
Наконец-то! У нас обновляют Spring 4.2 на Spring 4.3!
Аж сердечко от радости сжимается!
Аноним 12/11/22 Суб 18:32:01 #34 №2512223 
Анон подскажи что сделать , что поля json парсились на русском. Не понимаю почему , но приходящие json тупо трансилами сохраняются. Типо name = Иван парсится как name = Ivan
Аноним 12/11/22 Суб 18:34:33 #35 №2512226 
>>2512218
А почему вам только сейчас понадобилось переходить с версии 2015 года на версию 2016?
Аноним 12/11/22 Суб 18:38:10 #36 №2512232 
>>2512226
Да там какая-то залупа для конфигурации EJB есть только для 4.3, раньше была не нужна, а сейчас понадобилась.
Аноним 12/11/22 Суб 18:41:11 #37 №2512234 
>>2512218
Че даже без бута?
Аноним 12/11/22 Суб 18:42:04 #38 №2512237 
>>2512234
Бут будет лет через 5.
Аноним 12/11/22 Суб 18:42:47 #39 №2512238 
>>2512237
Че за контора такая лоховская?
Аноним 12/11/22 Суб 18:43:20 #40 №2512239 
>>2512238
Сбер
Аноним 12/11/22 Суб 18:44:04 #41 №2512240 
>>2512239
Ну и залупа, так и знал.
Аноним 12/11/22 Суб 18:44:28 #42 №2512241 
>>2512240
Да вообще пиздец.
Аноним 12/11/22 Суб 18:45:46 #43 №2512242 
>>2512237
Первый бут работает начиная с 4.0.3.
Хотели бы - уже подключили.
Аноним 12/11/22 Суб 18:50:46 #44 №2512247 
>>2512242
Не хотели, конечно.
Он и Java 6 поддерживал, судя по описанию.
Аноним 12/11/22 Суб 19:01:32 #45 №2512258 
>>2512247
Я вот с бута 2.7.3 в январе-феврале на 3 с 6 спрингом буду переходить. Думаю должно все бесшовно пройти. На жабу 17 я месяца 3 назад перешел.
Но там микросервис в 10к строчек, который я на 2/3 переписываю уже 3 раз.
Аноним 12/11/22 Суб 19:08:41 #46 №2512266 
>>2512258
Не сидели бы мы на этом говне мамонта, будь у нас микросервис в 10к строчек, а не монолит на 1.5кк.
Аноним 12/11/22 Суб 19:16:01 #47 №2512282 
>>2512266
Если бы не желание тимлида поэкспериментировать с носикульными базами и я переписывал бы сервис только из-за изменения требования бизнеса - там было бы сильно больше функционала и уже не 10к строчек, а 15к минимум.
Аноним 12/11/22 Суб 19:45:54 #48 №2512310 
>>2512266
Ну у нас +- 20 сервисов и вместе наверно 150к строчек. Но до релиза еще полгода и на релизе будет ну 250-300 минимум.
А твои полтора 1.5кк это через сколько после выхода в прод?
Аноним 12/11/22 Суб 19:51:34 #49 №2512315 
>>2512310
В прод проект вышел где-то в нулевых, хз, сколько строчек тогда там было.
>>2512282
У нас экспериментировать не любят, большинство доработок только под требования бизнеса и поддержки.
Аноним 12/11/22 Суб 20:12:59 #50 №2512341 
Как сформировать http пакет (RST) и отправить на веб-сервер ?

P.S. - Средствами JAVA ! ! ! Можно и библиотекой воспользоватся.
Аноним 12/11/22 Суб 20:29:57 #51 №2512352 
>>2512341
RST не имеет отношения к HTTP. Тебе надо закрыть HTTP-соединение? При использовании HttpURLConnection просто выключи keep-alive:
System.setProperty("http.keepAlive","false");
Или тебе надо закрыть обычный сокет с сообщением RST? Тогда делай так:
socket.setLinger(true,0);
socket.close();
Аноним 12/11/22 Суб 22:16:00 #52 №2512413 
Это легитимный перекат?
Аноним 12/11/22 Суб 22:27:00 #53 №2512424 
>>2512413
Перекатили после тысячи постов, шизика с 19 жабой нет, только аниме в шапке не хватает. Чем не легитимный?
Подозреваю, что перекатывал модер, предыдущий тред удалили сразу после переката.
Аноним 12/11/22 Суб 22:33:15 #54 №2512434 
>>2512424
>Подозреваю, что перекатывал мочегандон
Этим и нелегитимный.
Аноним 12/11/22 Суб 22:54:35 #55 №2512447 
>>2512434
Как будто что-то плохое.
Аноним 12/11/22 Суб 23:19:12 #56 №2512458 
springPattern.png
https://www.youtube.com/watch?v=-vIjWMR6bGU

Вот тут прямо повторяют обсуждение того, что говорит обсуждалось тут тредов 5 назад - о том, что спринг заставляет писать процедурный код и не дает пользоваться половиной принципов солида.
Но вывод не как у Егорки, который говорит, что надо все переписать, чтобы соответсвовало святой ооп идеологии. А что нужно смириться и пытаться не совсем уж говнокодить и тестить все и вся.
Надеюсь, что кто-нибудь дойдет до того, что ооп и солид это просто забавные идеи на которые можно опираться, чтобы опираться хоть на что-то, но во многих конкретных случаях на них абсолютно целесообразно положить хуй.
Аноним 12/11/22 Суб 23:31:59 #57 №2512461 
>>2512458
Да можно юзать и ООП, достаточно применять Active record, объединив сервисы, репозитории и сущности в один класс, но придётся каждый раз туда прокидывать датасорс и другие зависимости, которые нельзя создавать на каждый пук.
Аноним 13/11/22 Вск 00:17:10 #58 №2512487 
>>2512458
>смириться и пытаться не совсем уж говнокодить и тестить все и вся.
>ооп и солид это просто забавные идеи на которые можно опираться, чтобы опираться хоть на что-то, но во многих конкретных случаях на них абсолютно целесообразно положить хуй.

Не все так просто.

С одной стороны, я согласен с твоим выводом, анон, что переписать все на православный ООП --- мертворожденная идея. Взять тот же cactoos --- реальных проблем он не решает никаких, местами противоречит выводам самого же Егора, и внутри устроен крайне посредственно (зато на баэлдунге засветился, лол, вы только чекните: https://www.baeldung.com/java-cactoos ).

С другой стороны, я не согласен с тобой, анон, насчет того, что нужно смириться, и чего то там пытаться. Точнее, как бы это сказать... В текущей ситуации мало сказать "пытайтесь", потому что "как пытаться то блеать, вилкой чтоли"? Сказать "смириться", это как ничего не сказать. Это как пиздеть пустопорошнюю чушь о том, что код должен быть читабелен, (читабельность --- полностью субьективная и эмоциональная тема, никакого конструктива на основе читабельности построить невозможно).

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

Короче, вся проблема в том, что дискус вокруг поддерживаемости софта засран эмоциями настолько, что сохранившие там рассудок предпочитают никогда больше не связываться с этой темой. Но проблемы от этого никуда не уходят. Для себя я пришел к определенным выводам по теме, но наверное здесь они никому не будут интересны, и это долгая история.
Аноним 13/11/22 Вск 00:34:30 #59 №2512494 
>>2512458
>>2512487

Ну и в продолжение.

Бугаенку конечно можно за многое ругать, но ИМХО факт его появления в публичном пространстве довольно репрезентативен. Сейчас он забанен на всех конференциях, но 2015-2017х годах он выступал много, ярко, и регулярно собирал полные залы народу. Хуй знат зачем они все шли --- может за лулзами, может --- за тем чтоб очко горело, но я склоняюсь к тому, что ходили на него потому, что нуждались в простых и тривиальных правилах, следуя которым можно держать техдолг под контролем. Не за пустопорожними размышлениями о солиде, не за очередным пучком паттернов, сахарком или фреймворком которые все равно не работают в перспективе, а за простым блять ответом --- как кодить так, чтобы через месяц-другой не кринжевать от собственного кода. И он давал простые правила. Они конечно тоже оказались нерабочими, но в то же время были четкими, резкими, не допускающими двусмысленнность.

И любопытный факт: на самом деле отменили Егора вообще не по причине всратости его элегантных обьектов, вот даже не близко. (на самом деле --- потому что он залез в SWJшный и околополитический дискус: после драмы в backendsecret его начали жрать анальники с твиттера, а окончательно добили Барух с ПК jug.ru, когда тот с ними посрался)
Аноним 13/11/22 Вск 00:39:15 #60 №2512497 
>>2512487
>к определенным выводам по теме, но наверное здесь они никому не будут интересны
нет, я вбросил именно потому что мне интересны подобные мнения анонов.


С выводами челиков из видосов я не очень согласен.
Например тдд. Я не особо опытный, но спрашивал на созвонах у нескольких десятков опытных товарищей про тдд. Только один писал что вообще пытался писать по тдд, но быстро забил. Искал, как писать тдд на спринге. Статей мало и там мало практических хинтов, видно что автор скорее всего в прод так не пишет на постоянку.
И что приватных методов в сервисах быть не должно. Вместо 6 приватных методов создать еще 2 сервиса по 3 метода, которые больше нигде не будут использоваться? И на все написать полный набор тестов.
И про то, что надо тестировать применение фреймворков. А сколько тестов надо богу тестов? Вот чисто про разработческие тесты. Ну вот пишем мы эндпоинт. Там есть кастомная валидация, есть какая-то логика на 7 коротких методов на уровне сервиса, есть поход во внешний сервис, есть пукание в кафку, есть 3 запроса в базу. Ну и смотрим на все юниты нам надо по 3-4 юзкейса, и на весь эндпоинт - интеграционный уровня сервиса десяток. В итоге на один эндпоинт нужно 55 тестов. И вот ты их написал, а завтра к тебе пришли и сказали, что логика эндпоинта меняется.
Аноним 13/11/22 Вск 00:43:20 #61 №2512500 
>>2512494
> Сейчас он забанен на всех конференциях
> 7 месяцев назад.
> SECON - Ассоциация разработчиков Пензы
> https://www.youtube.com/watch?v=vZtI1M2Uwco
Аноним 13/11/22 Вск 00:44:41 #62 №2512501 
>>2512500
Ну может не на всех. Но раньше он выступал гораздо чаще, везде где мог, и как для русскоязычной аудитории, так и для говорящей.
Аноним 13/11/22 Вск 00:45:05 #63 №2512502 
>>2512501
*англоговорящей
Аноним 13/11/22 Вск 00:51:46 #64 №2512508 
>>2512501
Я тебя наебал. Это было 3 года назад почти. Попутал почему-то, извини. Откуда я взял эти 7 месяцев - хз.
Он сейчас в политоту зачем то ударился и продал очко хуавею и продвигает почти что китайский 996 подход в рф.
Аноним 13/11/22 Вск 02:23:36 #65 №2512551 
Анон , помоги настроить свагер с httpbasic авторизацией. Уже 5 часов ебусь не понимаю.
Аноним 13/11/22 Вск 03:23:21 #66 №2512563 
>>2512551
А в чём проблема?
Я открыл пару мурзилок и написал это: https://pastebin.com/Ueak5YUP
Swagger-ui открывается по http://localhost:8080/swagger-ui/
Вводятся логин и пароль user/1234
Эндпоинты вызываются.
Аноним 13/11/22 Вск 03:35:37 #67 №2512564 
>>2512563
Там вроде можно прям на странице свагера как-то логиниться и скорее всего прокидывать только те ендпоинты, на которые есть пермишены, мб он это имеет ввиду.
Аноним 13/11/22 Вск 08:24:33 #68 №2512597 
>>2511502 (OP)
Как лучше разрабатывать REST API? Постоянно слышу про API first подход, когда ты руками описываешь OpenAPI спеку, а из нее уже генеришь код. Как лучше всего фиксировать контракты для интеграции с внешними системами и клиентами? Как автоматизировать процесс генерации клиентских библиотек, чтобы условной команде мобильного клиента не приходилось неделями дрочить код, чтобы написать клиент для интеграции с бекендом, а просто подключить сгенеренную либу в зависимости через Maven/Gradle и писать онли бизнес-логику.
Аноним 13/11/22 Вск 09:58:26 #69 №2512640 
>>2512497
Лучше бы спрашивал:
- сколько ты писал по тдд без спринга (месяц, год, два, десять лет)
- что в спринге послужило таким нереальным камнем преткновения, что фундаментально не позволило точно так же писать по тдд как раньше
Аноним 13/11/22 Вск 13:42:51 #70 №2512838 
>>2512563
Да , я допер как сделать что бы через логинку открывался свагер и были доступны эндпоинты. Я просто помню что я на питоне делал , так что бы при вызове эндпоинта вызывалась новая логинка. Вот как так сделать вообще хуй знает
Аноним 13/11/22 Вск 14:36:05 #71 №2512896 
>>2512640
Ты пишешь по тдд? На спринге, на другом стеке? Как долго?
Дело не в спринге. Просто я не встречал людей не на работе, ни в комментах и чатах в интернете, кто писал бы по тдд. Просто у людей, пишущих не на спринге я не особо спрашивал.
Аноним 13/11/22 Вск 16:12:23 #72 №2512952 
>>2512497

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

Что касается ТДД, тут уже вопрос сложнее. Сначала, нужно прояснить, в чем ключевое отличие олдскульного процедурного программирования от ООП или ФП, в докладе об этом было по вершкам. Раньше, если ты вызываешь одну процедуру из другой, ты каплишь одну процедуру на другую, средств полиморфизма тогда было не шибко много. С появлением новых парадигм появились куски кода как first-class-citizenы, и возможность декаплить их через абстракции. В ООП декаплинг происходит посредством интерфейсов и Depenency inversion principle. Но все пошло по пизде. Продедурные кодеры продолжали по привычке кодить процедурно на джаве, складывая все что "какбэ об одном и том же" в один класс. Дальнейшую историю можно проследить по рассказам того же Борисова в "спринг построителе" --- сначала эти сервисы были связаны друг с другом жостко. Потом придумали фабрики. Потом --- DI контейнеры. Венцом этой ветки эволюции процедурного кодинга стал спринг.

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

Чтобы ТДД работал, нужно пересматривать подходы к разработке таким образом, чтобы код разбивался на внятные единицы реюза, строго раздекапленные друг от друга. У функциональщиков это есть с самого начала --- единицей реюза у них является функция, а система типов позволяет декларировать абстрактный тип функции как аргумент другой функции, позволяя делать композицию функций не капля их друг на друга. В джаве это в теории тоже достижимо, если рассматривать класс как единицу реюза, а не как библиотеку процедур, но это долгая история.
Аноним 13/11/22 Вск 16:32:39 #73 №2512965 
>>2512952
>У функциональщиков это есть с самого начала
Ну то есть проект на какой-нибудь чистой скале без фреймворков без больших трудностей написать по тдд? Кафка была написана по тдд?
Хоть что-то популярное было написано по тдд?
Аноним 13/11/22 Вск 16:44:17 #74 №2512974 
>>2512952
Ну и еще вопрос - в чем такая большая проблема писать на паскале в спринге?
И писалось ли когда-то в прод широкого потребления более оопешно? Все что я читал, что до di-контейнеров был паттерн Service Locator и применялся в проде вместе с ejb. Я не вдавался особо, но критикуют его со стороны того, что он нарушает инкапсуляцию. Локаторы оопешны?
Или вот пример Бугаенки с огромной лесенкой вложенных объектов через конструкторы. Если это тру ооп, то я в рот ебал ооп и пойду молиться на спринг-паскаль.
Аноним 13/11/22 Вск 16:47:58 #75 №2512976 
>>2512965

За скалу не скажу, я на ней не кодил никогда. На джаве у меня есть один проект на работе, покрытый именно юнит тестами, и написанный без спринга (на самом деле мог бы быть и на спринге, но там просто нужды в нем не было, там требовался лоу-левел сокетодроч с микроконтроллерами через netty), но сам понимаешь --- NDA. Считается ли за TDD? Я не знаю, я просто пишу проект и покрываю его тестами. Test-first пробовал, но не зашло.
Аноним 13/11/22 Вск 17:03:58 #76 №2512980 
>>2512976
Насколько я понимаю, что тдд это именно тест-ферст. Или для тебя это максимальное покрытие конкретно юнитами?

Так то я тоже пишу тесты. Интеграционный уровня микросервиса от апишки до тестовой базы я пишу всегда. На валидаторы юниты пишу тоже всегда. На поход во внешние сервисы пишу более мелкие интеграционные и только если это внутренние сервисы.
Тестировать функционал по интеграции спринга с внешними системами, с кафкой например - была идея, но я от нее отказался. На сервисы и репошки пишу только когда логика в сервисе сложная(больше трех действий) или запрос в репошке не совсем тривиальный(например на апсерт пишу, а на инсерт или полный апдейт - нет). Но я понимаю, что это не тдд.
Аноним 13/11/22 Вск 17:07:37 #77 №2512982 
>>2512974
>в чем такая большая проблема писать на паскале в спринге?

Эмм... ну какбэ... потому что спринг написан на джаве для джавы, нет?

>Service Locator

Хз, не возьмусь комментировать.

>пример Бугаенки

Пример Бугаенки --- это попытка построить поверх джавовых классов функциональную парадигму. В целом направление правильное, но оно все сырое и не систематизированное. Есть хорошие практики: (Иммутабельность, отсутствие логики в конструкторах, агитация к маленьким публичным интерфейсам), есть двусмысленные и ненадежные (концепция "обьект как живой организм"), есть ситуативные (отказ от рефлексии и аннотаций), есть и полная лажа. Если заглянуть в его фреймворки, там все еще более пиздецово местами. Там много чего нужно дорабатывать и переосмыслять, чтобы матрешки не были такими пиздецово вложенными и можно было что то в прод кодить. Но в контексте разговора о юнит тестировании --- такие классы действительно проще тестить и переиспользовать.
Аноним 13/11/22 Вск 17:13:36 #78 №2512986 
>>2512982
>в контексте разговора о юнит тестировании --- такие классы действительно проще тестить и переиспользовать.
А интеграционный тест с 10+ уровнями матрешек как писать?
Аноним 13/11/22 Вск 17:13:59 #79 №2512987 
>>2512980
>Или для тебя это максимальное покрытие конкретно юнитами?

Ну я просто не бросаюсь в крайности. Когда я с нуля чето разрабатываю, я все таки сначала пишу код, а уже потом тесты на него. Test-first как правило тяжело делать когда ты еще толком не представляешь че и как тебе предстоит кодить. Но когда, например, я работаю над багом, я могу и с теста начать.
Аноним 13/11/22 Вск 17:20:56 #80 №2512993 
>>2512986
Для меня разные уровни тестирования отличаются только тестируемой сущностью: юнит тест тестирует юнит, интеграционный тест тестирует связку юнитов, e2e тест тестирует продукт (дисклеймер: смысл который я вкладываю в термины выше может отличаться от официально принятых определений, но мне похуй). Поэтому не считаю чем то зазорным взять матрешку и покрыть blackbox-тестами ее публичный контракт.
Аноним 13/11/22 Вск 20:28:26 #81 №2513128 
Какую dbms чаще всего юзают на практике? postgresql?
Аноним 13/11/22 Вск 20:39:20 #82 №2513143 
>>2513128
Да, постгрес, но и оракл пока юзают много где.
Аноним 13/11/22 Вск 20:43:27 #83 №2513153 
>>2513143
Как быть если попускают на незнании хубирнейта?
Аноним 13/11/22 Вск 20:46:26 #84 №2513159 
>>2513153
Хз, я вкатился туда, где ненавидят хибернейт и любят SQL.
Аноним 13/11/22 Вск 20:48:20 #85 №2513164 
>>2513159
на jooq шарашите?
Аноним 13/11/22 Вск 20:54:25 #86 №2513168 
>>2513164
Нет, пишем строковые константы, их передаём в JdbcTemplate. Все запросы только в DAO (кроме легаси говнокода), а для минимизации ошибок покрываем DAO тестами с in-memory HSQL с эмуляцией синтаксиса оракла.
Аноним 13/11/22 Вск 20:59:15 #87 №2513173 
>>2513168
>in-memory HSQL с эмуляцией синтаксиса оракла

Эмуляция с реальным поведением СУБД как часто расходится?
Аноним 13/11/22 Вск 21:05:59 #88 №2513180 
>>2513173
Если обычные инсерты/апдейты, почти не расходится, но 500-строчные запросы с оконными функциями для отчётов можно даже не пытаться покрыть, их вручную запускаем в оракловой консольке.
Аноним 13/11/22 Вск 21:12:30 #89 №2513186 
>>2513168
>пишем строковые константы, их передаём в JdbcTemplate
>in-memory HSQL с эмуляцией синтаксиса
стремно что то, что другое. Мне кажется уж лучше хуйбирнат. Там есть способы контролировать то что пишешь, QueryDSL тот же. Но ебля с жизненным циклом этого хуйбирната и его кешами остается.
Но мы использует jooq+postgres+testcontainers.
Аноним 13/11/22 Вск 21:30:28 #90 №2513208 
Разве честное тдд в проекте со спрингом не приводит хотя бы к тому, что у тебя с самого начала в проекте будет много маленьких классов типа ZalupaCreationService, ZalupaDeletionService с 1-2 методами, и т.д а не просто ZalupaService с сотней методов?
Ведь когда садишься писать по тдд, у тебя 1 фича = 1 тест, ты не пишешь код на вырост.
И скорее всего классы будут называться не XXXService а как-то более по ООПшному, типа имена существительные.
Вот только хуй знает как одобрят такой подход другие анальники на проекте, если они по тдд не писали тот же самый кусок
Аноним 13/11/22 Вск 21:36:35 #91 №2513211 
>>2513208
Мне кажется еще и когнитивно намного сложнее работать с 50 сервисами залупы с 2 методами, чем с 1 сервисом с сотней методов.
И ради чего увеличивать сложность? Ради понтов и феншуя? Чтобы гуру и боб мартин в твоей голове говорили малаца?
Ну и другие разрабы за такое хуями обложат, когда будут дописывать за тобой.
Аноним 13/11/22 Вск 21:43:24 #92 №2513213 
>>2511545
Я мимокрок, но у меня примерно такой лид, он найдёт тысячу и одну причину, чтобы не учиться чему-то новому и обосрать всё вообще юзает эклипс, когда весь отдел использует идею, хейтит и троллит всех кто на идее сидит, при этом не хочет учиться её юзать
Аноним 13/11/22 Вск 21:47:04 #93 №2513216 
>>2513211
Это довольно распространенная фобия, но на самом деле --- нет, не сложнее. Их количество компенсируется читабельностью имен и адской переиспользуемостью.

>И ради чего увеличивать сложность? Ради понтов и феншуя?

Ради переиспользуемости. Переиспользуемость --- крайне и незаслуженно недооцененная и недоизученная характеристика кода. По моим наблюдениям, все случаи говнокодистости можно логически свести к недостаточной переиспользуемости кода. Те же тесты, как простой пример. Нетестируемый код === нереюзабельный код, потому что тесты на самом деле --- ничто иное как частный случай реюза тестируемой сущности.
Аноним 13/11/22 Вск 22:21:17 #94 №2513248 
Как отключить авторизаю spring security в тестах ?
Аноним 13/11/22 Вск 22:42:34 #95 №2513267 
>>2513248
Сделать отдельную конфигурацию с ани реквест пермит алл
Аноним 13/11/22 Вск 23:18:39 #96 №2513309 
>>2512352
Спасибо. Ещё вопрос, где можно посмотреть свойства для setProperty() ?
Аноним 13/11/22 Вск 23:29:01 #97 №2513315 
>>2513309
В документации к используемой технологии. Джавовские проперти - это просто глобальная свалка ключей-значений, туда может писать кто угодно и что угодно, так что единого списка нет. Можно хоть создавать свои проперти.
Аноним 13/11/22 Вск 23:50:24 #98 №2513335 
Такое вопрос возник: можно ли на жабе сделать хорошую серверную мультиплеерную мобильную дрочильню? Но чтобы сервер мог держать пару десятков тысяч человек в одной условной песочнице? Если да, то ч помощью каких инструментов, если нет, то на чём лучше писать такое тогда? Из знаний жаба кор 1.6-1.8, 18-19, спринг, ну и всякое "бизнесовое" до кучи, но к вопросу не относящийся напрямую
Аноним 13/11/22 Вск 23:51:20 #99 №2513337 
>>2513335
Такой*
быстрофикс
Аноним 13/11/22 Вск 23:56:00 #100 №2513341 
>>2513335
Хватит одного жабакора. Покупаешь серверов да побольше и помощнее, и потом долго ебёшься с сокетами, потоками, вводом-выводом, в конце может что-нибудь да получится.
Аноним 14/11/22 Пнд 00:04:24 #101 №2513353 
>>2513341
Ещё варианты?
Аноним 14/11/22 Пнд 00:09:43 #102 №2513358 
>>2513353
C++
Аноним 14/11/22 Пнд 00:25:19 #103 №2513364 
>>2513358
Ему бы в этой жизни закончить проект хотя бы.
Аноним 14/11/22 Пнд 00:25:46 #104 №2513365 
>>2513341 >>2513358
А бывают специальные фреймворки для бекенда для сетевых игрулей? На плюсах или на чем угодно еще
Аноним 14/11/22 Пнд 00:33:20 #105 №2513369 
>>2513365
Только с нагрузкой 10 человек.
Аноним 14/11/22 Пнд 00:37:05 #106 №2513373 
>>2513369
Ну чел же выше писал про мобильную дрочильню. Это же не пкашная калофдюти, там не такой огромный трафик и прям пиздецки низкая летенси не нужна.
Аноним 14/11/22 Пнд 00:44:53 #107 №2513382 
>>2513373
Тогда 23 человека.
Аноним 14/11/22 Пнд 00:51:58 #108 №2513384 
>>2513382
В смысле на джаве же построены транзакции во всяких больших банках с большим оборотом клиентов
Аноним 14/11/22 Пнд 00:58:10 #109 №2513386 
>>2513384
Ещё в банках свои дата-центры с сотнями серверов.
Аноним 14/11/22 Пнд 01:00:12 #110 №2513389 
>>2513335
качай сорсы сервера любой ммо дрочильни (l2,aion, еще какаянить хуйня) и смотри как сделано, охуеешь от старого говнокода но глянешь как оно устроено
Аноним 14/11/22 Пнд 02:00:51 #111 №2513410 
>>2513335
Буквально в этом месяце на jokerconf выступал чувак, который делает бэкенды для игорей на vertx.
Аноним 14/11/22 Пнд 02:14:31 #112 №2513418 
>>2513335
>чтобы сервер мог держать пару десятков тысяч человек в одной условной песочнице

Классические энтерпрайзные ресты на сервлет-бэйзд стеке могут не подойти. Если пользователей реально дофига и у них дофига активности в реалтайме, понадобится неблокирующий стек и какой нить легковесный протокол типа UDP. Гуглить в сторону nio, асинхронности и реактивности.
Аноним 14/11/22 Пнд 02:46:38 #113 №2513429 
Чувак который захочет запустить мой спринг бут код должен делать mvnw clean install или достаточно mvnw spring-boot:run ?
Аноним 14/11/22 Пнд 02:49:20 #114 №2513431 
>>2513429
Нет, он должен делать java -jar app.jar
Аноним 14/11/22 Пнд 04:00:35 #115 №2513438 
>>2513431
Почему? В чем разница?
Аноним 14/11/22 Пнд 07:15:01 #116 №2513456 
>>2513410
На ютубе нет этого видео
Аноним 14/11/22 Пнд 07:16:16 #117 №2513458 
>>2513335
Если это какая-то пошаговая игра, то можешь посмотреть на https://vertx.io/. Если тебе нужно в реалтайме какой-нибудь мобильный шутан писать, то https://netty.io/
Аноним 14/11/22 Пнд 08:59:55 #118 №2513485 
>>2513458
Не шутан, но что-то типа ртс'ки (ну и конечно не всратое, как rise of kingdoms например)
>>2513389
>>2513410
>>2513458
Всем спасибо за советы
Аноним 14/11/22 Пнд 10:56:57 #119 №2513513 
>>2513456
Там через 3-4 месяца выкладывают. До этого платно на сайте.
Аноним 14/11/22 Пнд 14:47:31 #120 №2513648 
>>2513418
>энтерпрайзные ресты на сервлет-бэйзд стеке могут не подойти
На самом деле тот же jetty уже давно под капотом на nio крутится, так что в теории энтерпрайзные сервлеты тоже сойдут, хотя конечно лучше вертекс или нетти.
Аноним 14/11/22 Пнд 14:48:11 #121 №2513649 
>>2513389
Двачую насчет линейки, там жуткий понос вместо кода, но при этом реальный рабочий проект с nio.
Аноним 14/11/22 Пнд 15:01:56 #122 №2513659 
>>2513648
Че такое нио? я знаю только ио
Аноним 14/11/22 Пнд 15:08:32 #123 №2513666 
>>2513659
java.nio.*
Аноним 14/11/22 Пнд 15:52:15 #124 №2513722 
>>2513389
Откуда у вас сурцы игр от игровых компаний?
мимо даун
Аноним 14/11/22 Пнд 16:07:05 #125 №2513737 
>>2513722
Они наверное говорят о каких нить пиратских ректальных бэкпортах серверов линейки.
Аноним 14/11/22 Пнд 16:07:48 #126 №2513738 
Допустим я использую DAO подход, делаю DAO интерфейс, от него уже классы реализующий интерфейс. И вот в чём вопрос, правильно ли интерфейсы помечать как компоненты(бины) или лучше это делать исключительно с классами, которые реализуют этот интерфейс? Т.к. если взять JPA например, то там мы же по сути интерфейс помечаем как бин
Аноним 14/11/22 Пнд 16:12:10 #127 №2513745 
>>2513738
Щас DAO в основном генерят через спринг дату. То есть, пишут интерфейс, помечают его как Repository, но не пишут имплементацию --- спринг сам напишет. В общем случае интерфейс как бин помечать нет смысла, так как его не заинстанцируешь
Аноним 14/11/22 Пнд 16:25:58 #128 №2513748 
>>2513722
https://bitbucket.org/l2jserver/

Скорее всего про это идет речь.
Аноним 14/11/22 Пнд 16:35:21 #129 №2513751 
>>2513748
То есть сервер у этих пираток всегда был на джаве? Даже эта репошка с 2006 существует. А сама линейка с 2003.
А лицензионные серверы тоже на джаве?
Аноним 14/11/22 Пнд 17:46:17 #130 №2513789 
image.png
image.png
В первом варианте всегда будет выводиться 2, 4, 6.
Во втором всегда по разному. C чем связано такое поведение?

В документации к forEachOrdered сказано: Performs an action for each element of this stream, in the encounter order of the stream if the stream has a defined encounter order.
Как узнать, имеет ли стрим encounter order? Может ли вся разница быть в том, что Collections.emptyList() попросту не имеет этого encounter order?
Аноним 14/11/22 Пнд 18:45:23 #131 №2513822 
>>2513789
Да, может быть такое.

Стримы работают на сплитераторах, а у сплитераторов есть характеристики. Возможно конкат с unordered сплитератором сбросил ORDERED с листа, надо смотреть.

https://docs.oracle.com/javase/8/docs/api/java/util/Spliterator.html#characteristics--
Аноним 14/11/22 Пнд 21:04:00 #132 №2513925 
Пытаюсь записывать звук в файл.wav.
Вылазит исключение:
javax.sound.sampled.LineUnavailableException: line with format PCM_SIGNED 22050.0 Hz, 16 bit, mono, 2 bytes/frame, big-endian not supported.
Формат задаю вот так:
AudioFormat format = new AudioFormat(22050, 16, 1, true, true);

Подскажите пожалуйста в чем проблема ?
Аноним 14/11/22 Пнд 21:38:40 #133 №2513944 
>>2513925
Джава не поддерживает работу со звуком, в джаве есть только работа с сетью и файлами.
Аноним 14/11/22 Пнд 21:42:27 #134 №2513946 
15808016476102.jpg
>>2512458
>>2512487
>>2512952
Интересный видос, собсвенно на работе как минимум одно небольшое приложение чистейшая процедурщина
Но вот вопрос, где посмотреть на этот ООП?
Реально ли сейчас писать не процедурно? Как это выглядеть должно на спринге?
Ну вот читал клинкод и все понятно но не понятно, мелкие примеры это хорошо, хэлло ворлд написать по солиду смогу, но как должен выглядеть большой проект не ебу ваще
так сказать лучше один раз увидеть чем сто раз услышать
Аноним 14/11/22 Пнд 21:45:28 #135 №2513949 
>>2513946
И наблюдаются ли схожие тренды в других языках?
Аноним 14/11/22 Пнд 22:06:27 #136 №2513958 
>>2513944
Поддерживает.
Аноним 14/11/22 Пнд 22:20:26 #137 №2513971 
>>2513958
Нет.
Гуя в жабе тоже нет кста.
Аноним 14/11/22 Пнд 22:47:34 #138 №2513990 
>>2513946
>Но вот вопрос, где посмотреть на этот ООП?

Там же, где и на реальный ТДД, видимо. Где то далеко-далеко, за семью печатями NDA в коде какого то одного проекта из тысячи.

>Реально ли сейчас писать не процедурно?

В теории, как минимум существует ФП, который можно пощупать на примере haskell (http://learnhaskellforgood.narod.ru/learnyouahaskell.com/introduction.html) или даже, прости господи, скалы. На практике есть свои нюансы.
comments powered by Disqus

Отзывы и предложения