powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / jdk17
240 сообщений из 240, показаны все 10 страниц
jdk17
    #40105694
localhost8080
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый всем день)

кто то пробовал на 17ю перевести проект?

я тут попробовал локально наш основой - какие то тонны конфликтов ,градл с ума сходит - говорит у вас 17я джава,дайте мне 16ю
дал ему 16ю - все вообще развалилось
мейн класс не видит - пытаюсь прям из мейна запутиться тоже не видит
какая то жесть из 2017 ,когда на чистом спринге писали и пытались все библы подружуть - тут что то похожее

если был опыт поделетитес плиз - ибо нужно срочно свитчиться на 17ю
...
Рейтинг: 0 / 0
jdk17
    #40105699
pavel_nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сейчас в процессе перехода.
Gradle 7.2.0 + пришлось версии спринга бампнуть - как итог - пайпланы зелёные. Не думаю что дальше проблемы влезут.
...
Рейтинг: 0 / 0
jdk17
    #40105700
localhost8080
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pavel_nv
Сейчас в процессе перехода.
Gradle 7.2.0 + пришлось версии спринга бампнуть - как итог - пайпланы зелёные. Не думаю что дальше проблемы влезут.

бут какую версию поставили?
...
Рейтинг: 0 / 0
jdk17
    #40105701
localhost8080
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pavel_nv
Сейчас в процессе перехода.
Gradle 7.2.0 + пришлось версии спринга бампнуть - как итог - пайпланы зелёные. Не думаю что дальше проблемы влезут.

7.2.0 у нас не видит
Код: xml
1.
The specified Gradle distribution 'https://services.gradle.org/distributions/gradle-7.2.0-bin.zip' does not exist.
...
Рейтинг: 0 / 0
jdk17
    #40105703
pavel_nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spring boot 2.5.5
да, с версией я немного промахнулся)
Код: java
1.
https://services.gradle.org/distributions/gradle-7.2-all.zip


но у нас в докере собирается - а там он доступен как и 7.2.0
Код: java
1.
7.2.0-jdk17, 7.2-jdk17, 7-jdk17, jdk17, 7.2.0-jdk, 7.2-jdk, 7-jdk, jdk, 7.2.0, 7.2, 7, latest
...
Рейтинг: 0 / 0
jdk17
    #40105706
localhost8080
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pavel_nv,
ВРОДЕ как началася сборка и при компиляции упало

Код: sql
1.
ause: class lombok.javac.apt.LombokProcessor (in unnamed module @0x41542fc3) cannot access class com.sun.tools.javac.processing.JavacProcessingEnvironment (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.processing to unnamed module @0x41542fc3



ломбок самый свежий- я хз что еще не хватает
...
Рейтинг: 0 / 0
jdk17
    #40105709
pavel_nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
localhost8080,

у меня после обновления до 1.18.20 такая ошибка пропала.
Но это все гуглится за пару минут.
...
Рейтинг: 0 / 0
jdk17
    #40105710
H5N1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня есть проект jdk17, maven, spring boot 2, lombok.
работает
...
Рейтинг: 0 / 0
jdk17
    #40105756
Roman Osipov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
localhost8080
pavel_nv,
ВРОДЕ как началася сборка и при компиляции упало

Код: sql
1.
ause: class lombok.javac.apt.LombokProcessor (in unnamed module @0x41542fc3) cannot access class com.sun.tools.javac.processing.JavacProcessingEnvironment (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.processing to unnamed module @0x41542fc3



ломбок самый свежий- я хз что еще не хватает


ИМХО, Lombok - извращенное порождение карго-культа инкапсуляции и в проектах на Spring Boot бесполезен чуть более чем полностью, и даже вреден. Для DTO все поля можно объявить как public, а для объектов с поведением зависимости обычно инъектятся через конструктор.
...
Рейтинг: 0 / 0
jdk17
    #40105761
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Osipov
localhost8080
pavel_nv,
ВРОДЕ как началася сборка и при компиляции упало

Код: sql
1.
ause: class lombok.javac.apt.LombokProcessor (in unnamed module @0x41542fc3) cannot access class com.sun.tools.javac.processing.JavacProcessingEnvironment (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.processing to unnamed module @0x41542fc3



ломбок самый свежий- я хз что еще не хватает


ИМХО, Lombok - извращенное порождение карго-культа инкапсуляции и в проектах на Spring Boot бесполезен чуть более чем полностью, и даже вреден. Для DTO все поля можно объявить как public, а для объектов с поведением зависимости обычно инъектятся через конструктор.


Хорошо, что Вы написали "ИМХО".
Не пишите таких глупостей, пожалуйста.
...
Рейтинг: 0 / 0
jdk17
    #40105762
Roman Osipov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большой Синий Кит, Понимаю, что слегка порвал вам шаблон и оскорбил чувства верующего. Но уверен, что логичных объяснений обоснования применения Lombok вы привести не сможете.
...
Рейтинг: 0 / 0
jdk17
    #40105763
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Osipov
Большой Синий Кит, Понимаю, что слегка порвал вам шаблон и оскорбил чувства верующего. Но уверен, что логичных объяснений обоснования применения Lombok вы привести не сможете.


То, что Вы используете его только в том виде, что указали сами, уже доказывает, что мне ничего доказывать или обосновывать не нужно.
...
Рейтинг: 0 / 0
jdk17
    #40105764
Roman Osipov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большой Синий Кит
Roman Osipov
Большой Синий Кит, Понимаю, что слегка порвал вам шаблон и оскорбил чувства верующего. Но уверен, что логичных объяснений обоснования применения Lombok вы привести не сможете.


То, что Вы используете его только в том виде, что указали сами, уже доказывает, что мне ничего доказывать или обосновывать не нужно.


В общем-то типичный ответ верующего, как и ожидалось. Вера, конечно, в доказательствах не нуждается.
...
Рейтинг: 0 / 0
jdk17
    #40105766
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Osipov,

Вас заело на вере.

Как сказал Эйнштейн:
"Есть две бесконечные вещи — Вселенная и человеческая глупость. Впрочем, насчёт Вселенной я не уверен."

Продолжайте использовать Дто с паблик полями и конструктором, пишите об этом всем, но всегда, пожалуйста, *всегда* добавляйте "ИМХО", "мне так кажется", "у меня малый опыт работы, особенно с ломбок", "я писал только CRUD микро-сервисы на спрингбут" и т.д. и т.п.
...
Рейтинг: 0 / 0
jdk17
    #40105767
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S. Извините, модератор, по глупости зашел в ява-ветку на форуме и по глупости ответил на глупость.
...
Рейтинг: 0 / 0
jdk17
    #40105768
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тоже не понимаю зачем тащить Lombok в проект. Если много bolierplate-кода, то проще или в явном виде использовать какие-нибудь кодогенераторы, или в принципе что-то изменить в архитектуре.
...
Рейтинг: 0 / 0
jdk17
    #40105770
Roman Osipov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большой Синий Кит
Roman Osipov,

Вас заело на вере.

Как сказал Эйнштейн:
"Есть две бесконечные вещи — Вселенная и человеческая глупость. Впрочем, насчёт Вселенной я не уверен."

Продолжайте использовать Дто с паблик полями и конструктором, пишите об этом всем, но всегда, пожалуйста, *всегда* добавляйте "ИМХО", "мне так кажется", "у меня малый опыт работы, особенно с ломбок", "я писал только CRUD микро-сервисы на спрингбут" и т.д. и т.п.


Вы не правы - все мимо. Я работал с Lombok и знаю его возможности. Я разрабатываю распределенные высоконагруженные отказоустойчивые решения в большом диапазоне Java-технологий, в том числе с распределенными кэшами и брокерами. Опыт кодирования - более 30 лет. Т.ч. про глупость - это к вам скорее высказывание относится.
...
Рейтинг: 0 / 0
jdk17
    #40105771
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Osipov


Вы не правы - все мимо. Я работал с Lombok и знаю его возможности. Я разрабатываю распределенные высоконагруженные отказоустойчивые решения в большом диапазоне Java-технологий, в том числе с распределенными кэшами и брокерами. Опыт кодирования - более 30 лет. Т.ч. про глупость - это к вам скорее высказывание относится.


Это мало о чем говорит. Некоторые люди просто стареют.
...
Рейтинг: 0 / 0
jdk17
    #40105774
Roman Osipov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большой Синий Кит, Будет что сказать-то по сути вопроса? Почему Lombok не бесполезен? Хоть одну конкретную вещь?
...
Рейтинг: 0 / 0
jdk17
    #40105776
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Osipov,

Хорошо, есть java 8, есть лист объектов с 10 пропертями - этот лист нужно обойти, и, при определенном условии изменить изменить 1 или 2 поля объекта, и собрать обратно в коллекцию. Объект должен быть immutable, с правильным hashCode, equals, красивым toString() (включающий parent), наследоваться от другого ParentData, причем менять проперти нужно и те, что в парент.

Напишите это, пожалуйста.

class ParentData
class Data extends ParentData

var parentData = property1
var data = property2, property3


var dataList = List<Data>

// process data list and update property1 and property3, get immutable collection of immutable objects.
...
Рейтинг: 0 / 0
jdk17
    #40105777
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S. Вы сказали, что пишете разные высоконагруженные приложения, а это *стандартный* кейс
...
Рейтинг: 0 / 0
jdk17
    #40105779
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Большой Синий Кит
Roman Osipov,

Хорошо, есть java 8, есть лист объектов с 10 пропертями - этот лист нужно обойти, и, при определенном условии изменить изменить 1 или 2 поля объекта, и собрать обратно в коллекцию. Объект должен быть immutable, с правильным hashCode, equals, красивым toString() (включающий parent), наследоваться от другого ParentData, причем менять проперти нужно и те, что в парент.

Напишите это, пожалуйста.

class ParentData
class Data extends ParentData

var parentData = property1
var data = property2, property3


var dataList = List<Data>

// process data list and update property1 and property3, get immutable collection of immutable objects.
поддерживаю баттл)
Ближе к коду!
...
Рейтинг: 0 / 0
jdk17
    #40105780
Roman Osipov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большой Синий Кит, Начнем с того, что условия - Объект должен быть immutable, с правильным hashCode, equals неактуальны для абсолютного большинства кастомных объектов. Не делают DTO immutable и не определяют для них hashCode, equals, если они не используются где-то как ключи. А для объектов с поведением тем более. Так что это надуманные требования, приведенные может быть из-за недостатка реального опыта.
...
Рейтинг: 0 / 0
jdk17
    #40105782
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Osipov
Большой Синий Кит, Начнем с того, что условия - Объект должен быть immutable, с правильным hashCode, equals неактуальны для абсолютного большинства кастомных объектов. Не делают DTO immutable и не определяют для них hashCode, equals, если они не используются где-то как ключи. А для объектов с поведением тем более. Так что это надуманные требования, приведенные может быть из-за недостатка реального опыта.


Да причем тут дто? Еще раз говорю - может Вы "разрабатываю распределенные высоконагруженные отказоустойчивые решения в большом диапазоне Java-технологий, в том числе с распределенными кэшами и брокерами. Опыт кодирования - более 30 лет. ", но либо:

1) Вы врете
2) Вы пишете говнокод.

Уж простите.

Еще раз повторяю, кейс *абсолютно* реальный. Такой кейс нужен для реальной обработки стримов данных, причем эти данные должны быть готовы для использования в других хеш-ориентированных коллекциях.
...
Рейтинг: 0 / 0
jdk17
    #40105783
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Osipov
Большой Синий Кит, Начнем с того, что условия - Объект должен быть immutable, с правильным hashCode, equals неактуальны для абсолютного большинства кастомных объектов. Не делают DTO immutable и не определяют для них hashCode, equals, если они не используются где-то как ключи. А для объектов с поведением тем более. Так что это надуманные требования, приведенные может быть из-за недостатка реального опыта.


Я написал для Вас задание.

Еще раз повторяю - этот кейс абсолютно реален в серьезных приложения, где используются не только DTO, далеко не только они.
...
Рейтинг: 0 / 0
jdk17
    #40105784
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Большой Синий Кит
Roman Osipov,

Хорошо, есть java 8, есть лист объектов с 10 пропертями - этот лист нужно обойти, и, при определенном условии изменить изменить 1 или 2 поля объекта, и собрать обратно в коллекцию. Объект должен быть immutable, с правильным hashCode, equals, красивым toString() (включающий parent), наследоваться от другого ParentData, причем менять проперти нужно и те, что в парент.

Напишите это, пожалуйста.

class ParentData
class Data extends ParentData

var parentData = property1
var data = property2, property3


var dataList = List<Data>

// process data list and update property1 and property3, get immutable collection of immutable objects.
поддерживаю баттл)
Ближе к коду!


Да я уже написал это. Тут минута нужна, но товарищ, видимо, не может


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
    @Value
    @NonFinal
    @SuperBuilder(toBuilder = true)
    private static class ParentData{
        String property1;
    }

    @Value
    @SuperBuilder(toBuilder = true)
    @EqualsAndHashCode(callSuper = true)
    private static class Data extends ParentData {
       String property2;
       String property3;
    }


var result =
                dataList.stream()
                        .map(data -> data.toBuilder()
                                .property1("newOne")
                                .property2("newThree")
                                .build())
                        .collect(Collectors.toUnmodifiableList());




Все. Ждем товарища.
...
Рейтинг: 0 / 0
jdk17
    #40105785
Roman Osipov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большой Синий Кит, Для реальной обработки стримов данных обычно достаточно того, что объект сериализуется/десериализуется. Хэш код тут ни при чем. Еще раз повторяю - только в небольшом количестве случаев объекту реально надо прописывать хэш-код. Есть объекты с поведением, есть DTO - какой еще тип объектов можете назвать, который обширно используется в приложениях?
...
Рейтинг: 0 / 0
jdk17
    #40105788
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Osipov
Большой Синий Кит, Для реальной обработки стримов данных обычно достаточно того, что объект сериализуется/десериализуется. Хэш код тут ни при чем. Еще раз повторяю - только в небольшом количестве случаев объекту реально надо прописывать хэш-код. Есть объекты с поведением, есть DTO - какой еще тип объектов можете назвать, который обширно используется в приложениях?



Короче, разработчик *распределенных* /и/ высоконагруженных приложений с 30-ти летним опытом, я тут ликбез по полной устраивать не буду.
...
Рейтинг: 0 / 0
jdk17
    #40105794
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Osipov,
Код будет?
...
Рейтинг: 0 / 0
jdk17
    #40105795
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Без Lombok этот код не написать что ли? Если речь о двух классах с тремя свойствами, то в чём проблема написать все эти getter/setter вручную? Если у вас сотни или тыщи таких классов с десятками свойств, ну в IDE обычно есть средства автоматизации, которые за вас напишут этот boilerplate-код. Либо эта схема данных должна описываться в виде модели или на DSL, из которых нужный код может генериться. Не понимаю почему эта задача должна решаться именно Lombok'ом.
...
Рейтинг: 0 / 0
jdk17
    #40105797
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb
Без Lombok этот код не написать что ли? Если речь о двух классах с тремя свойствами, то в чём проблема написать все эти getter/setter вручную? Если у вас сотни или тыщи таких классов с десятками свойств, ну в IDE обычно есть средства автоматизации, которые за вас напишут этот boilerplate-код. Либо эта схема данных должна описываться в виде модели или на DSL, из которых нужный код может генериться. Не понимаю почему эта задача должна решаться именно Lombok'ом.


Послушайте, Вы притворяетесь, что ли?

Дааааа.. видимо, правду пишут, что (как минимум) Java форум помер.
...
Рейтинг: 0 / 0
jdk17
    #40105798
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb
двух классах с тремя свойствами

Ares_ekb
вас сотни или тыщи таких классов с десятками свойств
а посередине?
Вы сами показываете какой то максимализм. Либо три либо миллион.
Дак сколько соток копать лопатой? 3 или гектар?
...
Рейтинг: 0 / 0
jdk17
    #40105799
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эта задачка слишком тривиальная. Сделайте мне допустим редактор ER моделей с помощью Lombok. Нужно чтобы модели, которые рисуют пользователи хранились в базе на сервере, чтобы было API для работы с моделями, чтобы сам редактор моделей был на клиенте в браузере. Для этого нужно дофига кода:

1) Код для работы с базой (например, Hibernate'овые Entity-классы)
2) DTO для передачи на клиент
3) Мапинги между 1 и 2 в обе стороны
4) REST API или что-то такое
5) Клиентский код (JavaScript-классы)

Причём, если в этот редактор моделей я хочу добавить какие-то новые типы объектов (пусть это будет редактор каких-нибудь расширенных ER моделей или вообще других моделей), то мне нужно обновить код по всем этим 5 пунктам.

Толку от того, что Lombok избавит меня от написания getter/setter, создания билдеров и т.п. Мне нужно на порядок больше boilerplate-кода, совершенно разного. Один из вариантов - это описать схему данных в виде какой-нибудь Ecore-метамодели и сгенерить из неё весь этот код.

В Lombok функциональность мизерная, но проблем со сборкой и т.п. он добавляет порядком, вечно что-то отваливается. Если, уж, нужно упрощать разработку, то использовать нормальные решения, а не урезанные костыли, которые больше проблем добавляют.
...
Рейтинг: 0 / 0
jdk17
    #40105800
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я полностью за автоматизацию разработки, но Lombok - это автоматизация на таких минималках, что толку от неё вообще не видно.
...
Рейтинг: 0 / 0
jdk17
    #40105801
Roman Osipov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
Roman Osipov,
Код будет?


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
    static class ParentData {
        String property1;
    }

    static class Data extends ParentData {
        String property2;
        String property3;
    }

    List<Data> result = dataList.stream()
                .peek(data -> {
                    data.property1 = "newOne";
                    data.property2 = "newThree";
                })
                .collect(Collectors.toUnmodifiableList());



Как и говорил ранее, хэш/эквалс в большинстве случаев не нужен. А когда нужен без проблем вставляется вызов Appache Commons HashCodeBuilder. Что там, что там - одна строка.
...
Рейтинг: 0 / 0
jdk17
    #40105802
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb,
Вы перепутали ветки форума.
По умолчанию в java и особенно в ОРМ говорят о CRUD приложениях.
А потом уже о ГИС, Редакторах и ERP
...
Рейтинг: 0 / 0
jdk17
    #40105804
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb
Я полностью за автоматизацию разработки, но Lombok - это автоматизация на таких минималках, что толку от неё вообще не видно.
+1 с поправками.
- назовите линейку продуктов
- чел выше наехал на либу не уточняя минималки
...
Рейтинг: 0 / 0
jdk17
    #40105806
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb,

Нет-нет, это слишком тривиальная задача. Я пока еще не придумал, что конкретно попросить Вас мне тут сделать, но Вы обязательно сделайте. С ломбоком или нет - не важно.

Главное, что-нибудь поумнее, с пунктами и подпунктами. Можно любое приложение, но не тривиальное, и чтобы функциональность была не мизерная.... или даже мизерная, не суть - просто я уверен, тут все наслаждаются Вашим умом в любом случае.
...
Рейтинг: 0 / 0
jdk17
    #40105808
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Osipov
PetroNotC Sharp
Roman Osipov,
Код будет?


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
    static class ParentData {
        String property1;
    }

    static class Data extends ParentData {
        String property2;
        String property3;
    }

    List<Data> result = dataList.stream()
                .peek(data -> {
                    data.property1 = "newOne";
                    data.property2 = "newThree";
                })
                .collect(Collectors.toUnmodifiableList());



Как и говорил ранее, хэш/эквалс в большинстве случаев не нужен. А когда нужен без проблем вставляется вызов Appache Commons HashCodeBuilder. Что там, что там - одна строка.


Ну вот и выяснили, какой Вы специалист.
Это все очень печально.
Более комментировать не буду.
...
Рейтинг: 0 / 0
jdk17
    #40105809
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Osipov
PetroNotC Sharp
Roman Osipov,
Код будет?


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
    static class ParentData {
        String property1;
    }

    static class Data extends ParentData {
        String property2;
        String property3;
    }

    List<Data> result = dataList.stream()
                .peek(data -> {
                    data.property1 = "newOne";
                    data.property2 = "newThree";
                })
                .collect(Collectors.toUnmodifiableList());



Как и говорил ранее, хэш/эквалс в большинстве случаев не нужен. А когда нужен без проблем вставляется вызов Appache Commons HashCodeBuilder. Что там, что там - одна строка.





авторКак и говорил ранее, хэш/эквалс в большинстве случаев не нужен. А когда нужен без проблем вставляется вызов Appache Commons HashCodeBuilder. Что там, что там - одна строка.

У меня лучше:
Код: java
1.
System.out.println("Hello world!")



+
Стримы тоже не нужны, проперти обновлять не надо, объекты иммутабл не надо, классы тоже, да вообще, выходит, что ничего не надо, все тлен - что так, что этак с точки зрения вечности это все глупая трата времени...

Но при желании, можно вставить весь Apache Commons, можно и Apache Spark - не суть.
А давайте вообще все вставим? Ну просто, ради интереса.
...
Рейтинг: 0 / 0
jdk17
    #40105810
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уууууууууууууу

Я рад, что Blazkowicz и Mayton продолжают присутствовать на этом форуме. Честно говоря, не знаю, как они это выдерживают. Говорю без всякой иронии.
...
Рейтинг: 0 / 0
jdk17
    #40105811
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Большой Синий Кит
Blazkowicz
колись где он))
...
Рейтинг: 0 / 0
jdk17
    #40105816
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему я должен что-то "выдерживать" или не выдерживать?

Единсвтенное что меня печалит - это вялая активность всего форума.
Мы выдержали Луговского, Дедала и Студентика. А сегодняшний
трафик - это просто капающая вода из крана.
...
Рейтинг: 0 / 0
jdk17
    #40105819
H5N1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, тоже интересно, есть на форуме еще кто-то моложе 40, засирающий код геттерами, сеттерами, билдерами вручную ?
в чем бонус ручной работы ?
...
Рейтинг: 0 / 0
jdk17
    #40105821
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp,

в разных проектах использовали разные инструменты и подходы. Обычно схема такая.

1) Если есть много типового кода, значит можно его описывать в виде графической модели или придумать для этого специальный DSL, что позволит не писать лишнее.

Хоть для графических моделей, хоть для DSL нужно разработать метамодель. Метамодель описывает семантическую, смысловую составляющую нашего языка. Например, мы делаем какую-нибудь учетно-аналитическую систему и в ней полно совершенно типовых формочек, типового API для доступа к данным, типовых DTO-классов, Entity-классов и т.п. Соответственно в нашей метамодели мы описываем бизнес-сущности, которые нам нужны: формочка, поле формочки, визард (последовательность формочек), правило валидации и т.д. Описать всё это можно в любой нотации: на языке UML, в виде ER модели, в табличке в Excel перечислить сущности и атрибуты - вообще без разницы. Очень часто для этого используется язык Ecore . В статье последняя картинка это как-раз пример Ecore-метамодели. В нашем случае была бы метамодель описывающая атрибуты и связи между такими сущностями как формочка, поле, визард и т.п.

2) Затем для этой метамодели нужно разработать конкретный синтаксис: либо сделать редактор диаграмм ( раз , два ), на котором люди смогут описывать уже конкретные формы, либо описать синтаксис DSL ( раз , два ), чтобы они всё это делали в текстовом виде.

Для создания редакторов диаграмм можно использовать Sirius . По ссылке можно посмотреть много примеров разных нотаций для моделей. Для создания DSL раньше можно было использовать EMFText (он у меня в статьях описывается). Сейчас в основном используют Xtext , там смысл тот же.

На этом этапе у нас есть инструмент с помощью которого пользователи системы или разработчики могут описывать формочки или что там ещё им нужно.

3) Теперь из этих моделей можно что-то генерить. Для генерации кода из моделей можно использовать Xtend . Сейчас ощущение, что его забросили. У него было две ключевые особенности. Он позиционировался как улучшенная Java, но с появлением Kotlin и улучшением самой Java это потеряло актуальность. И второй момент: на нём очень удобно писать кодогенераторы - для этого он и сейчас продолжает использоваться.

Можно тупо писать кодогенераторы на Java, и часто так делают, но мне не очень нравится.

Для генерации кода из Ecore моделей можно использовать Acceleo .

Ещё один вариант - это не генерить код сразу из модели, а сначала преобразовать эту модель в другую модель, и затем последнюю сериализовать в текстовое представление. Например, мы в одном проекте описывали структуру документов на языке UML, описывали правила валидации этих документов на языке OCL . Затем генерили из всего этого AST (абстрактные синтаксические деревья) либо для XPath выражений, либо для Java кода. Правила преобразования исходного AST в результирующее описывали на языке QVTo . Полученное AST сериализировали в текст с помощью EMFText (либо сейчас это можно делать с помощью Xtext).

Вообще, есть полно и других инструментов для кодогенерации и т.п.


Смотрю на этот пост, на количество ссылок, аббревиатур и базвордов... Большой Синий Кит и так уже "наслаждается" моими умственными способностями, после этого поста на мне как на специалисте можно просто ставить клеймо профнепригодности.

Наверное, да, Lombok будет попроще. В принципе, Lombok - это тоже один из инструментов модельно-ориентированной разработки. Единственное мы не создаём какой-то свой язык моделирования или DSL. Разработчики Lombok уже создали его за нас и встроили в Java в виде аннотаций. Наверное это имеет право на существование, но я для себя не вижу смысла. Либо автоматизация на уровне Lombok не нужна вообще, либо нужна нормальная полноценная автоматизация, для которой Lombok не достаточно.
...
Рейтинг: 0 / 0
jdk17
    #40105823
Roman Osipov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
H5N1
да, тоже интересно, есть на форуме еще кто-то моложе 40, засирающий код геттерами, сеттерами, билдерами вручную ?
в чем бонус ручной работы ?


Проблема в том, что эти геттеры, сеттеры, билдеры в большинстве случаев просто не нужны при разработке обычных приложений. Но их настойчиво лепят, а потом чтобы не лепить их вручную используют Lombok. Костыль на костыль
...
Рейтинг: 0 / 0
jdk17
    #40105825
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
public record JdkFuckenRecord(String noMore, String getters) {
    
}
...
Рейтинг: 0 / 0
jdk17
    #40105827
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
H5N1
засирающий код геттерами, сеттерами, билдерами вручную ?
Если в проекте условно 2,5 класса, то почему бы и не написать. Если проект чуть сложнее, то я вообще не вижу смысла описывать эти классы в коде вручную. Мне проще описать их в модели или на DSL и сгенерить целиком вместе со всеми вспомогательными мэпперами (Entity-DTO), репозиториями, билдерами и т.п.

Обычно такие классы, у которых куча геттеров, это классы, описывающие какие-нибудь бизнес-сущности, какое-то состояние системы, может быть DTO (но действительно большой вопрос, нафига для них геттеры и сеттеры). Короче, за этими классами стоит какая-то схема данных. Если она небольшая, ну, сделаю я это вручную. Если большая, то буду описывать в полноценной модели.

На мой взгляд Lombok - это тоже засирание проекта, лишние зависимости.
...
Рейтинг: 0 / 0
jdk17
    #40105829
Никанор Кузьмич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb
Например, мы делаем какую-нибудь учетно-аналитическую систему
Берем low-code платформу типа Oracle APEX... Задача решена
(Извините, не удержался)
...
Рейтинг: 0 / 0
jdk17
    #40105830
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а если на проекте сегодня 2 класса, завтра 4, послезавтра 6 что тогда. Через неделю начинать свою схему писать или через 10 дней. Свои генераторы моделей звучит красиво, в итоге есть шанс что кроме автора там ничего никто либо не разберет либо не захочет разбирать.

Буквально недавно попробовал генератор моделей для swagger.json получалось так себе, пришлось выкинуть все что нагенерил (нечитаемо, compile errors, да и вообще все равно все руками проверять судя по ворнингам в логах).


в пользу ломбока, практически все модели в пределах одной страницы не нужно листать ничего. Особенно если есть не просто getter а кастомный геттер. Его сразу видно. Хотя поначалу тоже было не хотелось это ломбок пользовать ибо в IDE генератор, а как разберешся как жил до этого.
...
Рейтинг: 0 / 0
jdk17
    #40105832
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb
Например, мы делаем какую-нибудь учетно-аналитическую систему и в ней полно совершенно типовых формочек, типового API для доступа к данным, типовых DTO-классов, Entity-классов и т.п.

-1
Болезнь всех программистов в возрасте.
Не надо автоматизировать программиста!
Это напоминает как в дельфи формочки записывали в бд и потом оттуда рожали.
- типовые формочки решает наследование и шаблоны в IDE
- типовое API решает ОРМ и @RepositoryRestResource
В спринг буте и геттеры не нужны))))
...
Рейтинг: 0 / 0
jdk17
    #40105833
H5N1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb
Если проект чуть сложнее, то я вообще не вижу смысла описывать эти классы в коде вручную. Мне проще описать их в модели или на DSL и сгенерить целиком вместе со всеми вспомогательными мэпперами (Entity-DTO), репозиториями, билдерами и т.п.

вам проще, а для других это разбираться в чужом велосипеде, который тут едет, тут не едет, а здесь велосипедист понял как был не прав и свалил в другой проект.
lombok это стандарт, который убережет наследников от велосипедов с хорошей задумкой но квадратными колесами.
...
Рейтинг: 0 / 0
jdk17
    #40105835
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lleming,
Да. Генераторы это еще хуже чем ломбок и чем руками.
...
Рейтинг: 0 / 0
jdk17
    #40105836
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb,
Сущности это таблицы бд.
Они разные. Как разная таблица Юзверь и Счёт.
Ну ка, найди у них общее?))))
...
Рейтинг: 0 / 0
jdk17
    #40105839
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb
На мой взгляд Lombok - это тоже засирание проекта, лишние зависимости.

По Ломбоку можно поднять отдельный топик. У ломбока есть нетривиальные ситуации (я щас не могу вспомнить)
когда лучше было не использовать его чем использовать. Возможно это было связано с наследованием и с конструкторами.
Не помню точно. Вобщем - если топик будет создан - подумаем и вспомним.
...
Рейтинг: 0 / 0
jdk17
    #40105841
Roman Osipov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lleming
а если на проекте сегодня 2 класса, завтра 4, послезавтра 6 что тогда. Через неделю начинать свою схему писать или через 10 дней. Свои генераторы моделей звучит красиво, в итоге есть шанс что кроме автора там ничего никто либо не разберет либо не захочет разбирать.

Буквально недавно попробовал генератор моделей для swagger.json получалось так себе, пришлось выкинуть все что нагенерил (нечитаемо, compile errors, да и вообще все равно все руками проверять судя по ворнингам в логах).


в пользу ломбока, практически все модели в пределах одной страницы не нужно листать ничего. Особенно если есть не просто getter а кастомный геттер. Его сразу видно. Хотя поначалу тоже было не хотелось это ломбок пользовать ибо в IDE генератор, а как разберешся как жил до этого.


Поясню на примере. Есть вложенные классы
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
    static class C {
        public String value;
    }

    static class B {
        public C c;
    }

    static class A {
        public B b;
    }



В варианте без геттеров/сеттеров присваивание делается как-то так:
Код: sql
1.
a1.b.c = a2.b.c



Если использовать Lombok то получится такой код:
Код: sql
1.
a1.getB().setC(a2.getB().getC());



Первый вариант читается гораздо лучше. Это во-первых. Во-вторых есть дырявые абстракции - никто глядя на второй вариант не даст гарантии, что внутри гет/сет нет кода управления ядерным реактором. С первым вариантом такие гарантии понимания работы кода есть.
...
Рейтинг: 0 / 0
jdk17
    #40105843
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
lleming,
Да. Генераторы это еще хуже чем ломбок и чем руками.

Hibernate тоже можно рассматривать как генератор DDL при настройке hibernate.hbm2ddl.auto

Вообще генераторов сейчас гораздо больше чем мы думаем. Просто не все из них генерят код.
...
Рейтинг: 0 / 0
jdk17
    #40105846
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никанор Кузьмич
Ares_ekb
Например, мы делаем какую-нибудь учетно-аналитическую систему
Берем low-code платформу типа Oracle APEX... Задача решена
(Извините, не удержался)

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

Вот натянется на этот глобус Oracle Apex?
...
Рейтинг: 0 / 0
jdk17
    #40105850
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
PetroNotC Sharp
lleming,
Да. Генераторы это еще хуже чем ломбок и чем руками.

Hibernate тоже можно рассматривать как генератор DDL при настройке hibernate.hbm2ddl.auto

Вообще генераторов сейчас гораздо больше чем мы думаем. Просто не все из них генерят код.
я не против, если программист это не видит. Он выше сам строит Модель каждый раз. И dsl тоже.
Сизифоф труд.
...
Рейтинг: 0 / 0
jdk17
    #40105851
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Osipov
В варианте без геттеров/сеттеров присваивание делается как-то так:
Код: sql
1.
a1.b.c = a2.b.c

ты сишник чтоле?
Где в хибере или буте мы это делаем?
...
Рейтинг: 0 / 0
jdk17
    #40105852
Roman Osipov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
Roman Osipov
В варианте без геттеров/сеттеров присваивание делается как-то так:
Код: sql
1.
a1.b.c = a2.b.c

ты сишник чтоле?
Где в хибере или буте мы это делаем?

Hibernate без проблем принимает аннотации над public полями, без геттеров и сеттеров.
...
Рейтинг: 0 / 0
jdk17
    #40105854
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Osipov
PetroNotC Sharp
пропущено...
ты сишник чтоле?
Где в хибере или буте мы это делаем?

Hibernate без проблем принимает аннотации над public полями, без геттеров и сеттеров.
ну молодец он.
Тогда скажи проще
- ребята, с 20хх года геттеры вообще не нужны.
...
Рейтинг: 0 / 0
jdk17
    #40105855
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp,

вроде я ещё не очень пожилой :) Спринг бут - это немного другая реализация той же самой идеи. Выделяем основные виды сущностей в коде: SpringBootApplication, Component, RestController и т.п. Можно было бы всё приложение нарисовать в виде модели, а можно прямо в коде пометить каждый класс/метод нужными аннотациями. То же самое с Hibernate: можно пометить классы в коде, можно описать всё в XML. А можно нарисовать модель и из неё сгенерить всё, что нужно.

Я вообще никакой принципиальной разницы между всеми этими вариантами не вижу. Идея везде общая. Сначала мы определяем из каких типовых частей состоит наше приложение (модели, контроллеры, вьюхи, репозитории, сущности, DTO - всё что угодно). Затем уже возможны варианты:

1) Сделать базовые классы (базовая вьюха, базовый контроллер, базовая формочка со списком, базовая формочка с детальной информацией и т.п.) и от них наследовать другие классы - то, о чем вы говорите

2) Для каждой типовой части сделать аннотацию. Разработчики будут аннотировать ими код и в рантайме эти классы будут обрабатываться специальным образом (как в spring, hibernate)

3) Вместо аннотаций использовать какой-нибудь XML, JSON и т.п. - те же аннотации, но во внешнем файле

4) Сделать визуальный язык моделирования для рисования контроллеров, вьюх и т.п. Генерить из этих моделей либо весь код, либо генерить скелет, а остальное дописывать

5) Сделать DSL. Либо генерить из него код, либо интерпретировать его в рантайме.

Вы говорите, что не нужно автоматизировать разработчика. Зачем тогда maven, gradle? Фактически это специальные DSL, которые позволяют описывать один из аспектов приложения: его зависимости от других библиотек, правила сборки. По-моему разработчики только и занимаются тем, что автоматизируют разработку. Только почему-то пункт 5 у них обычно вызывает легкое отторжение и подозрение, пункт 4 - это вообще прямо ужас-ужас, пункт 3 - ну какое-то легаси, пункт 2 - норм, если это делал гуру в фреймвоке, которым пользуются не менее N человек, если по нему не менее X вопросов на stackoverflow и дата последнего релиза не старше 1 месяца, и только пункт 1 можно использовать самим в своих приложениях. А я вообще принципиальной разницы между этими вариантами не вижу, это всё детали реализации. Какой вариант удобнее, тем можно и пользоваться.
...
Рейтинг: 0 / 0
jdk17
    #40105861
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb
вроде я ещё не очень пожилой :) Спринг бут - это немного другая реализация той же самой идеи. Выделяем основные виды сущностей в коде: SpringBootApplication, Component, RestController и т.п. Можно было бы всё приложение нарисовать в виде модели, а можно прямо в коде пометить каждый класс/метод нужными аннотациями. То же самое с Hibernate: можно пометить классы в коде, можно описать всё в XML. А можно нарисовать модель и из неё сгенерить всё, что нужно.

Вот смотри.
Есть первый вариант создания окна в статике (дельфи)
FormMy my = new FormMy()
Где расположение контролов и наличие описано в файле dfm
И есть динамическое создание
FormMy my = new FormMy()
Button btn = new Button()
btn.Parent = my
......
Ты упорно агитируешь за второй вариант.
-1
...
Рейтинг: 0 / 0
jdk17
    #40105862
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я-бы ввел такую метрику. Стоимость внесения изменений (CMC). Если вам для того чтобы перименовать поле - надо просмотреть
100500 строк кода и еще и отдельно базу - то это высокая стоимость. Если вы просто заходите в json или yaml и переименовываете
поле - и всё работает после сборки проекта - то это дешевая стоимость.

Это к вопросу пользы и вреда генераторов. ЧТО у вас будет в роли DSL, скрипт, проперти файлы или java код - не важно.
Важно как дорого это все развивать и поддерживать. Очень многие разработчики шарахаются DSL, и изо всех сил
пытаются вытягивать какую-то опцию аннотациями. Мне такая практика кажется просто гипертрофированной.

Надо в целом смотреть по ситуации. Иногда DSL может быть удобнее когда вы собираете семейство бизнес сущностей
и для базы и для фронта и для бэка.
...
Рейтинг: 0 / 0
jdk17
    #40105863
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb
1) Сделать базовые классы (базовая вьюха, базовый контроллер, базовая формочка со списком, базовая формочка с детальной информацией и т.п.) и от них наследовать другие классы - то, о чем вы говорите
ООП не работает в бд.
Выше вопрос к вам по сущности Юзверь и Счет.
Промолчали.
...
Рейтинг: 0 / 0
jdk17
    #40105865
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Сущность - это уникальный объект в бд.
Он собрался его/ее наследовать.
...
Рейтинг: 0 / 0
jdk17
    #40105866
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я-бы спросил как он ее собирается наследовать? Тоесть что будет в базовом типе?
...
Рейтинг: 0 / 0
jdk17
    #40105868
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
H5N1
вам проще, а для других это разбираться в чужом велосипеде, который тут едет, тут не едет
Я не могу согласиться. Если в проекте, скажем, в 5 раз меньше кода, то в нём проще разобраться. Скажем 20% кода написано вручную, 80% сгенерено из модели. Сгенеренный код типовой, разбираться в нём не нужно и править его вручную не нужно. Все эти технологии используются в разных компаниях. Я не могу сказать, что их очень много, но обычно это достаточно крупные компании, которые могут себе позволить автоматизацию разработки. Есть целый консорциум Object Management Group, который занимается стандартизацией в данной области. И все эти языки - MOF, OCL, QVTo, MOF M2T и т.п. - это международные стандарты, для которых уже есть готовые реализации.

Велосипед - это скорее писать тонны boilerplate-кода. А если удаётся разложить приложение на какие-то типовые куски, четко всё это описать до такой степени, что аналитики/разработчики в этих терминах (контроллеров, вьюх, репозиториев, форма со списком, форма с детализацией и т.п.) смогут описать приложение и потом это описание практически один в один на верхнем уровне переносится в код, в идеале что-то генерится, либо пишется вручную. Это нормальный промышленный подход. Lombok и spring boot - это хорошо, но обычно недостаточно.
...
Рейтинг: 0 / 0
jdk17
    #40105874
Roman Osipov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
Ares_ekb
1) Сделать базовые классы (базовая вьюха, базовый контроллер, базовая формочка со списком, базовая формочка с детальной информацией и т.п.) и от них наследовать другие классы - то, о чем вы говорите
ООП не работает в бд.
Выше вопрос к вам по сущности Юзверь и Счет.
Промолчали.


В смысле не работает? JPA поддерживает мэппинг как наследования, так и композиции. При чем разными способами - хочешь в одну таблицу отображай, хочешь в разные.
...
Рейтинг: 0 / 0
jdk17
    #40105875
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Есть первый вариант создания окна в статике (дельфи)

И есть динамическое создание

Ты упорно агитируешь за второй вариант
Нет, первый вариант - это 4-ый пункт из моего сообщения, ну либо 3-ий, если dfm можно редактировать в текстовом редакторе (я не помню уже бинарный он или текстовый). А второй - это 1 или 2 из моего сообщения.

Я наоборот говорю, что все эти варианты имеют право на жизнь и принципиальной разницы между ними нет.

Сначала нужно в принципе определить (в голове, на листе бумаге) из каких типовых частей состоит приложение (форма со списком, форма с детализацией, ещё какая-то форма, котнроллеры, репозитории, ...). А дальше куча вариантов на выбор:

1) Нарисовать несколько типовых базовых форм в dfm

2) Реализовать в коде несколько типовых базовых форм и от них наследовать остальные

3) Придумать свой графический язык для проектирования форм и всего остального приложения и преобразовывать эти модели в dfm

4) То же самое, но генерить код

5) Вместо графического языка сделать текстовый DSL

...
...
Рейтинг: 0 / 0
jdk17
    #40105884
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Сущность - это уникальный объект в бд.
Он собрался его/ее наследовать.
Я не очень понял вопрос. Модель не обязана быть объектно-ориентированной (типа UML классы с наследованием и т.п.). Модели могут быть какими угодно.

mayton
ЧТО у вас будет в роли DSL, скрипт, проперти файлы или java код - не важно
Да, я как-раз об этом говорю. У многих людей слово модель четко ассоциируется с диаграммой классов UML или чем-то подобным. AST для DSL выражения - это тоже модель, просто сериализованная в текстовом виде. JSON, YAML, XML и т.п. - это тоже просто формы представления модели.

Скажем есть 1) диаграмма классов UML 2) Java-классы с JPA аннотациями, 3) XML конфиг для hibernate 4) Excel табличка со списком сущностей и атрибутов 5) Word-документ для аналитика или заказчика, описывающий схему данных (это совсем крамольный пункт). Всё это просто разные формы представления одной и той же схемы данных. Если мы можем легко перейти от одного представления к другому, то какая вообще разница. Какое представление удобнее, тем и нужно пользоваться, а остальные будут производными от него. Но это касается не только схемы данных, но и всего приложения.
...
Рейтинг: 0 / 0
jdk17
    #40105886
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb
Я наоборот говорю, что все эти варианты имеют право на жизнь и принципиальной разницы между ними нет.
разница огромная
- статику окно делает студен за один день в WYSIWYG редакторе. Ты делаешь распил бабла на месяц
- между сущностью Юзер карл! И Счет нет ничего общего. Даже для студента выше.
...
Рейтинг: 0 / 0
jdk17
    #40105887
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb
5) Word-документ для аналитика или заказчика, описывающий схему данных (это совсем крамольный пункт).

Это может быть не моделью но просто некой стартовой точкой. Мне сложно себе представить
поддержку модели на основе Word-документа.
...
Рейтинг: 0 / 0
jdk17
    #40105889
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb
Модели могут быть какими угодно.
да. Ты моделируешь там где не надо.
Просят построить ИС. А ты сделаешь КОНСТРУКТОР информ систем.
Просят табуретку. А ты - конструктор (DSL) табуреток.
Просят сайт. А ты - генератор сайтов.
...
Рейтинг: 0 / 0
jdk17
    #40105891
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просят сет бинов со сквозным поведением. А ты - Spring с AOP.
...
Рейтинг: 0 / 0
jdk17
    #40105893
Никанор Кузьмич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Никогда в жизни никто не ставил мне такую задачу. Один из заказчиков говорил - вот у нас есть
черный ящик. В него с одной стороны втекают биржевые события. А с другой стороны я хочу
чтоб вытекали команды к трейдингу. И систем - зоорпарк. И интеграций и стандартов - зоопарк.
И аналитика туда втекает. И метадата. И история индексов. И живые события.

Вот натянется на этот глобус Oracle Apex?
Апекс - это веб-морда к БД. А в вашей постановке я вообще не вижу ни намека на какой-либо интерфейс пользователя. Соответственно, апекс просто не на что натягивать. Если очень хочется, то можно все это написать на PL/SQL (и иногда на нем и пишут), а на апексе сделать красивые картинки для демонстрации перформанса (если других задач не осталось).

PetroNotC Sharp
Ares_ekb
вроде я ещё не очень пожилой :) Спринг бут - это немного другая реализация той же самой идеи. Выделяем основные виды сущностей в коде: SpringBootApplication, Component, RestController и т.п. Можно было бы всё приложение нарисовать в виде модели, а можно прямо в коде пометить каждый класс/метод нужными аннотациями. То же самое с Hibernate: можно пометить классы в коде, можно описать всё в XML. А можно нарисовать модель и из неё сгенерить всё, что нужно.

Вот смотри.
Есть первый вариант создания окна в статике (дельфи)
FormMy my = new FormMy()
Где расположение контролов и наличие описано в файле dfm
И есть динамическое создание
FormMy my = new FormMy()
Button btn = new Button()
btn.Parent = my
......
Ты упорно агитируешь за второй вариант.
-1
Я так понял, он как раз агитирует за первый вариант, только у него свой луна-парк с парой дополнительных уровней. В делфи dfm файл генерируется средой, когда юзер руками раскладывает контролы на форме. А у него еще на один уровень абстракции выше - даже раскладка на форме идет уже как результат автоматизации.

Ares_ekb
H5N1
вам проще, а для других это разбираться в чужом велосипеде, который тут едет, тут не едет
Я не могу согласиться. Если в проекте, скажем, в 5 раз меньше кода, то в нём проще разобраться. Скажем 20% кода написано вручную, 80% сгенерено из модели.
Вы забываете при этом, что перед тем, как сгенерировать эти 80%, на вашем велосипеде простите, средстве моделирования, надо научиться ездить. Можно ли это сделать за один день? Можно ли это сделать за один день, не обращаясь за помощью к кому-либо из коллег? Если нет, то закладывайте еще время на обучение.

Ares_ekb
Сгенеренный код типовой, разбираться в нём не нужно и править его вручную не нужно.
А это, простите, сказка какая-то. Вы гарантируете, что ваш сгенерированный код всегда будет оптимальным, не будет потреблять лишних ресурсов? У вас невозможна ситуация, когда пользователь имел в виду одно, а сгенерировалось что-то другое?
...
Рейтинг: 0 / 0
jdk17
    #40105894
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никанор Кузьмич
Берем low-code платформу типа Oracle APEX... Задача решена
(Извините, не удержался)
Да, я об этом и говорю! А если low-code платформы нет, то пишем её сами. Это не настолько космическая задача, как принято думать. Пресловутый Lombok - это тот же low-code, но на минималках. Spring Boot и Hibernate - то же low-code. Ещё можно придумать свои аннотации, хотя в том же C# это развито на много больше. А Lisp/Scheme - это один сплошной low-code, там просто размыта грань между написанием кода и его генерацией (благодаря макросам).

mayton
Вообще генераторов сейчас гораздо больше чем мы думаем. Просто не все из них генерят код.
Например, документацию из комментариев в коде. Или Swagger генерит UI для доступа к API.
...
Рейтинг: 0 / 0
jdk17
    #40105899
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я думаю что хороший профессионал не избегает кодо-генерации а наоборот - использует ее в хвост и в гриву.

Способность команды выучить кодо-генератор - мы можем рассмотреть отдельным топиком. Но то уже
управленческая задача.

А у нас тут - идея в вакууме.
...
Рейтинг: 0 / 0
jdk17
    #40105901
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb
Да, я об этом и говорю! А если low-code платформы нет, то пишем её сами
Блин, для ERP пишите!
Да, там ядро системы есть.
Но это оффтоп.
...
Рейтинг: 0 / 0
jdk17
    #40105906
H5N1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton

Единсвтенное что меня печалит - это вялая активность всего форума.
Мы выдержали Луговского, Дедала и Студентика. А сегодняшний
трафик - это просто капающая вода из крана.


так забаньте уже Петро. думаю не я один такой, кому проще на английском вопрос сформулировать, чем тут через тупые вопросы Петро пробиваться, прекрасно понимаю, что ответы этому персонажу не нужны, он просто скучает.
...
Рейтинг: 0 / 0
jdk17
    #40105909
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Это может быть не моделью но просто некой стартовой точкой. Мне сложно себе представить
поддержку модели на основе Word-документа.
Либо конечной точкой, описали схему данных и сгенерили из неё всё остальное: Java-код, Word-документ и т.п.

Это конечно какая-то жесть и на практике наверное нет смысл делать такое. Но возможен такой сценарий. Нарисовали схему данных, сгенерили из неё Word-документ, отправили на согласование заказчику, предметным специалистам и т.д. Они что-то поправили в документе, синхронизируем эти изменения обратно в модель. Можно в другую модель (не в исходную), а затем аналитик уже в удобном для него инструменте моделирования сравнивает две модели, смотрит что изменилось, мержит изменения в основную версию. Затем итерации повторяются. В итоге из модели генерятся окончательные версии документов и код. Поскольку источник один, то это гарантия того, что документы, код, какие-нибудь XML-схемы и т.п. не разойдутся между собой. У нас в некоторых проектах работа была ровно так организована за исключением конечно автоматического перегона документа обратно в модель, это проще сделать аналитику вручную, хотя если бы делалось автоматически, то экономило бы кучу времени.

Ещё как вариант можно использовать не обязательно Word. А какие-то языки разметки или DSL, но прикрутить к ним WYSIWYG редактор. Похоже всё уже придумано, я описываю JetBrains MPS :) хотя сам им не пользовался
...
Рейтинг: 0 / 0
jdk17
    #40105911
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В топку Word. Запаришся его парсить и сохранять.

swagger.json - да.
.graphql - да
.wsdl - да

Word - не надо.
...
Рейтинг: 0 / 0
jdk17
    #40105914
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
H5N1
mayton

Единсвтенное что меня печалит - это вялая активность всего форума.
Мы выдержали Луговского, Дедала и Студентика. А сегодняшний
трафик - это просто капающая вода из крана.


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

Это так не работает. Ты жмешь кнопку. И профильный модератор (Denis кажется) реагирует.

Я за его действия - не отвечаю. Джентльмен по одну сторону от Суэтца.... ну короче ты понял.
...
Рейтинг: 0 / 0
jdk17
    #40105915
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
H5N1,
Ты имхо забыл)))) LOL
...
Рейтинг: 0 / 0
jdk17
    #40105919
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb
Это не настолько космическая задача,
именно трудоемкая.
Выше сказал - студент делает одно окно в день.
Для ПО вида ERP конечно надо две модели. И модель ядра.
Вот тут генерируйте справочники.
Тема не про ERP
...
Рейтинг: 0 / 0
jdk17
    #40105951
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никанор Кузьмич
Вы забываете при этом, что перед тем, как сгенерировать эти 80%, на вашем велосипеде простите, средстве моделирования, надо научиться ездить. Можно ли это сделать за один день? Можно ли это сделать за один день, не обращаясь за помощью к кому-либо из коллег? Если нет, то закладывайте еще время на обучение.
Если код можно написать за один день или даже месяц, то всё это нафиг не нужно. Конечно, проще нажать две кнопки в IDE и сгенерить эти злосчастные геттеры/сеттеры. Наверное, да, у меня немного деформация. Есть смысл это использовать, когда на написание и отладку кода уйдет скажем год. И можно потратить месяц на создания кодогенератора, это всяко более интеллектуальное занятие. Я просто реально уже давно другими проектами не занимаюсь. И у нас люди вечно начинают писать тонны какого-то boilerplate-кода, а я это автоматизирую, чтобы как можно больше всего этого переехало из каталога src в src-gen.

Никанор Кузьмич
Вы гарантируете, что ваш сгенерированный код всегда будет оптимальным, не будет потреблять лишних ресурсов? У вас невозможна ситуация, когда пользователь имел в виду одно, а сгенерировалось что-то другое?
Что может быть не оптимальным в Entity или DTO классах? Или в мепперах между Entity и DTO? В каких-нибудь CRUD-контроллерах? Речь же не идёт о генерации каких-то сложных алгоритмов. Самое сложное, что я генерил: правила валидации документов, описанные на одном DSL (язык OCL), преобразовывал в XPath и Java код. При этом там делалась куча всяких оптимизаций, автоматически генерился не только код для валидации, но и для определения пути к невалидному элементу и т.п. В данном случае пользователь - это предметный специалист, на Java он не напишет вообще никакую реализацию, тем более оптимальную. К тому же на DSL у него правило валидации занимает одну строку, а на Java там генерится строк 50-100 boilerplate-кода.

Встречный вопрос :) Как вы пишите SQL запросы? Вдруг СУБД выполнит их не оптимально? Наверное лучше напрямую доставать данные из базы через какое-нибудь API или сделать свою СУБД. Вы пишите одну строку SQL, а внутри там происходит куча операций, где гарантия, что во всех этих тоннах кода программист не допустил ошибку? Где гарантия, что СУБД правильно поняла ваш запрос? Вдруг вы имели в виду другое? Где гарантия, что по вашим JavaDoc комментариям сгенерилась корректная и оптимальная документация? Где гарантия, что вы описали API с помощью Swagger и для вас сгенерился правильный boilerplate-код или правильный UI? Где гарантия, что ваш gradle скрипт работает правильно? DSL, генераторы разных вещей из кода или из моделей используются просто повсеместно.

Насчет корректности сгенеренного кода, да, конечно я озадачивался этим вопросом. Гарантируется это очень просто. Если тупо, то тестированием. Протестировать генератор можно один раз, это на порядок проще, чем писать кучу новых тестов для однотипного кода, который писался бы вручную. Более правильный вариант это 1) формально описать семантику исходного языка 2) описать семантику результирующего языка 3) формально описать преобразование выражений из одного языка в другой 4) доказать что это преобразование сохраняет семантику. Всё это стоит примерно в тыщу раз дороже, чем написание кодогенераторов или преобразований моделей. Меня хватило только частично на 1-ый пункт . Но дело не в кодогенерации, в принципе формальная верификация любого софта - это очень долго дорого. Для бедных есть тестирование.
...
Рейтинг: 0 / 0
jdk17
    #40105956
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подумалось что для авто-генерируемого кода сам DSL является спецификацией. Поэтому генерированный код - вообще
проверять не надо. Надо просто проверить генератор. А кто полезет проверять руками java код - тому надо руки отбить
и направить его носом в DSL. Там - всё что надо.

DSL == спецификация
...
Рейтинг: 0 / 0
jdk17
    #40105958
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb
Самое сложное, что я генерил: правила валидации документов, описанные
на одном DSL (язык OCL), преобразовывал в XPath и Java код. При этом там делалась куча всяких
оптимизаций, автоматически генерился не только код для валидации, но и для определения пути
к невалидному элементу и т.п.

Нет предела совершенству. Но я-бы просто остановился на таком наборе правил, который даёт
полное предсказание результата. Как в SQL (DQL):
Код: java
1.
SELECT ename, sal WHERE manager <> 'KENT' AND sal > 4500.00


безотносительно реализации SQL машины или наличия индексов - я всегда уверен
что получаю результат обладающий определёнными свойствами.

(в этом языке даже таже предикат (predicate) сам как-бы говорит нам что он - "предсказатель")

Тоесть если ваш OCL дает такое однозначное понимание свойств - то он почти совершенен.
И можно не компилируя и не запуская приложение уже заранее говорить будет ли результат
обладать свойствами или нет. Это важно для тестирования например.
...
Рейтинг: 0 / 0
jdk17
    #40105959
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Блин, для ERP пишите!
Уже есть DevExpress XAF, там формочки, менюшки и т.п. описываются в модели. Достаточно описать схему данных, всё остальное получается практически автоматически. Правда, есть какая-то доля нетиповой функциональности, которую приходится реализовывать вручную и на неё обычно и уходит больше всего времени. На XAF уже сделана ERP Галактика. VIPRos тут ещё где-то был, идея абсолютно та же самая.

Для Java с этим сложнее. В основном наверное используют Eclipse. Ecore-модели и всякие кодогенераторы там очень давно. 1С: EDT сделана на Eclipse, я никогда ей не пользовался, но на сколько я понимаю конфигурации там создаются в виде Ecore-моделей, а этот их русскоязычный DSL реализован Xtext, но это всё не точно.
...
Рейтинг: 0 / 0
jdk17
    #40105963
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Word - не надо.
Он нужен для заказчиков, бизнес-пользователей. Уж, лучше его сгенерить по нужному шаблону (или ГОСТу), чем аналитики будут делать это вручную. А если в word что-то поправили, то, да, наверное проще чтобы аналитик это перенес в модель вручную.
...
Рейтинг: 0 / 0
jdk17
    #40105970
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
DSL == спецификация
mayton
Тоесть если ваш OCL дает такое однозначное понимание свойств - то он почти совершенен.
И можно не компилируя и не запуская приложение уже заранее говорить будет ли результат
обладать свойствами или нет. Это важно для тестирования например.
Да, в этом и смысл. OCL - это как-раз скорее язык спецификации, чем программирования. В основном в нём обращения к свойствам/полям объектов, логические предикаты, минимальный набор операций (арифметических, строковых) и т.п. И больше ничего, нет операций изменения, вывода в консоль и т.п. Есть SQL для реляционных моделей, XPath/XQuery для XML и есть OCL для объектных моделей.
...
Рейтинг: 0 / 0
jdk17
    #40105974
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb
Что может быть не оптимальным в Entity или DTO классах? Или в мепперах между Entity и DTO? В каких-нибудь CRUD-контроллерах?

Как что. Превращение ваших 100тыр кода в легаси.
Начинаем новый проект.
На spring boot starter data rest который наследник над jpa.
Вы автоматизировали jpa?
А как быть с этим наследником?
Взять ваше легаси?
...
Рейтинг: 0 / 0
jdk17
    #40105975
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb
Уже есть DevExpress XAF
я в курсе. Теперь покажите это для бэкенда java.
...
Рейтинг: 0 / 0
jdk17
    #40105978
Никанор Кузьмич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb
Встречный вопрос :) Как вы пишите SQL запросы? Вдруг СУБД выполнит их не оптимально?
Вот именно! СУБД регулярно выполняет их неоптимально. Поэтому приходится изучать внутреннее устройство движка СУБД. Не исходники, конечно, но документацию читать. В какой последовательности выполняется запрос. Какие бывают виды джойнов. Какие бывают виды индексов. Какой индекс оптимален для данного распределения данных. И кучу другой фигни. И на изучение всего этого уходят годы. Так-то я бы тоже сказал, что вот я написал "select * from my_table", а остальное меня не волнует. Оказывается, волнует. Раз в год и палка стреляет: на одном проекте я столкнулся с тем, что запрос "select * from my_table" (вот именно такой) возвращал первую порцию данных через 30 секунд, при том, что система была довольно сильно нагруженная, и все остальное работало как часы.

Ares_ekb
Где гарантия, что СУБД правильно поняла ваш запрос? Вдруг вы имели в виду другое?
Регулярно понимает неправильно. Для того, чтобы написать код (или запрос) правильно, надо иметь в мозге модель компьютера. Эта модель мысленно эмулирует поведение процессора. Мозг человека достаточно развит, чтобы проделывать такую операцию. Когда вы смотрите на код и пытаетесь представить, что он делает, вы именно что эмулируете работу компьютера в своей голове. Но способности мозга не безграничны, поэтому любую программу постоянно приходится запускать. Вы слышали хоть раз, чтобы человек сел, написал кучу кода (не делая тестовых запусков вообще) и код сразу заработал без ошибок? И довольно часто бывает, что вы видите результат работы кода, но вы не понимаете, почему он неправильный. Приходится изучать, как всё это работает. Процессор, компилятор, и т. д. С опытом это проходит, удивления становится всё меньше и меньше. И в этом и был мой вопрос - сколько времени нужно, чтобы результат работы вашего генератора начал всегда совпадать с моими ожиданиями?
Ну или я перефразирую: никто из ваших джунов, приходивших к вам на проект, ни разу не задавал вопрос "почему генератор сгенерировал это, когда я ожидал вон то?" Я правильно понимаю?

Ares_ekb
Что может быть не оптимальным в Entity или DTO классах?
Откуда мне знать? Смотрите мой пример выше с запросом "select * from my_table". Что может быть не так? У Кайта же ясно было написано, что в этом случае СУБД просто читает сразу первые попавшиеся блоки, задержки быть не должно. Что может быть неоптимальным в "select * from my_table"? Оказывается, что-то может.
...
Рейтинг: 0 / 0
jdk17
    #40105983
Roman Osipov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Никанор Кузьмич
Ares_ekb
Встречный вопрос :) Как вы пишите SQL запросы? Вдруг СУБД выполнит их не оптимально?
Вот именно! СУБД регулярно выполняет их неоптимально. Поэтому приходится изучать внутреннее устройство движка СУБД. Не исходники, конечно, но документацию читать. В какой последовательности выполняется запрос. Какие бывают виды джойнов. Какие бывают виды индексов. Какой индекс оптимален для данного распределения данных. И кучу другой фигни. И на изучение всего этого уходят годы. Так-то я бы тоже сказал, что вот я написал "select * from my_table", а остальное меня не волнует. Оказывается, волнует. Раз в год и палка стреляет: на одном проекте я столкнулся с тем, что запрос "select * from my_table" (вот именно такой) возвращал первую порцию данных через 30 секунд, при том, что система была довольно сильно нагруженная, и все остальное работало как часы.

Ares_ekb
Где гарантия, что СУБД правильно поняла ваш запрос? Вдруг вы имели в виду другое?
Регулярно понимает неправильно. Для того, чтобы написать код (или запрос) правильно, надо иметь в мозге модель компьютера. Эта модель мысленно эмулирует поведение процессора. Мозг человека достаточно развит, чтобы проделывать такую операцию. Когда вы смотрите на код и пытаетесь представить, что он делает, вы именно что эмулируете работу компьютера в своей голове. Но способности мозга не безграничны, поэтому любую программу постоянно приходится запускать. Вы слышали хоть раз, чтобы человек сел, написал кучу кода (не делая тестовых запусков вообще) и код сразу заработал без ошибок? И довольно часто бывает, что вы видите результат работы кода, но вы не понимаете, почему он неправильный. Приходится изучать, как всё это работает. Процессор, компилятор, и т. д. С опытом это проходит, удивления становится всё меньше и меньше. И в этом и был мой вопрос - сколько времени нужно, чтобы результат работы вашего генератора начал всегда совпадать с моими ожиданиями?
Ну или я перефразирую: никто из ваших джунов, приходивших к вам на проект, ни разу не задавал вопрос "почему генератор сгенерировал это, когда я ожидал вон то?" Я правильно понимаю?

Ares_ekb
Что может быть не оптимальным в Entity или DTO классах?
Откуда мне знать? Смотрите мой пример выше с запросом "select * from my_table". Что может быть не так? У Кайта же ясно было написано, что в этом случае СУБД просто читает сразу первые попавшиеся блоки, задержки быть не должно. Что может быть неоптимальным в "select * from my_table"? Оказывается, что-то может.


+ Поддерживаю. Мысли правильные. Например, набросать аннотации для хибера не трудно и автокодом, но заставить его выполняться в приемлемое время - это задача уже не под силу автогенераторам. Здесь знание контекста необходимо и творческий подход.
...
Рейтинг: 0 / 0
jdk17
    #40105986
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb
mayton
Word - не надо.
Он нужен для заказчиков, бизнес-пользователей. Уж, лучше его сгенерить по нужному шаблону (или ГОСТу), чем аналитики будут делать это вручную. А если в word что-то поправили, то, да, наверное проще чтобы аналитик это перенес в модель вручную.

Мои аналитики уже лет 7 не знают что такое Word. Они лабают на confluence в markup языках.

Шучу конечно. Word конечно они видят. Но его роль в цикле разработки весьма нивелирована.
...
Рейтинг: 0 / 0
jdk17
    #40105999
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb,
Я выше не случайно говорил про линейку.
В архитектуре есть понятие оверхед.
Вот ваш метод _в большинстве crud проектов_ - оверхед.
В небольшой части, например ERP это эффективно
...
Рейтинг: 0 / 0
jdk17
    #40106009
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никанор Кузьмич,

генератор из OCL в XPath/Java писался не для разработчиков, а для аналитиков. Они вообще не знают, что там есть какой-то генератор, они просто пишут спецификации правил. Раньше они писали их на русском языке, в части правил вообще невозможно было понять, что имеется в виду, их можно было интерпретировать как угодно. Эти правила отдавались системным аналитикам, которые во всём этом разбирались и писали чуть более детальную постановку разработчику. Разработчик во всём этом находил ещё кучу неоднозначностей или реализовывал как считал правильным. Затем всё это тестировалось. Причём протестировать задача не из простых. Представьте документ с 300 полями и 1000 правил валидации эти полей из разряда "если в таком-то поле указано то-то, то сумма таких-то полей должна быть такой-то". Сколько тестов нужно написать, чтобы всё это проверить? А это только один документ из десятков. Плюс правила постоянно меняются.

Когда предметные специалисты стали писать правила не на русском языке, а на формальном (на самом деле конечно они не сами их писали, а с помощью обученных системных аналитиков), то все эти этапы (интерпретация правил на русском языке, реализация их в коде, тестирование) просто потеряли актуальность. Затрачиваемое время уменьшается на порядок.

Конечно генератор может работать неправильно, но протестировать его проще, чем постоянно тестировать эти тыщи правил.

Конечно аналитики могут написать неправильную спецификацию правила и тогда для неё сгенерится неправильный код. Но вероятность того, что они напишут неправильное правило на русском языке и что его неправильно поймут и реализуют существенно выше.

Поскольку эти правила описаны на формальном языке (а не на русском языке и не в коде), то мы можем автоматически сгенерить тесты по спецификациям правил. Можем автоматически проверить правила на противоречивость (например, два правила одновременно соблюдаться никак не могут), на избыточность, ... Правда мы этого не делали :) но возможность есть. В принципе, для Java кода есть всякие статические анализаторы, генераторы тестов. А для очень ограниченного DSL эти вещи делать гораздо проще, чем для ЯП общего назначения.

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

Насчет того, чтобы запустить код и посмотреть как он работает. 1) Раньше они просто писали правила на русском языке, эти правила могли быть вообще бессмысленными, ссылаться на несуществующие поля документа. То что они пишутся на формальном языке и валидируются в соответствии со структурой документа - это уже огромный шаг. 2) Если они их как-то формулировали на русском языке, то могут как-то сформулировать и на формальном. Математики же как-то пишут формулы не запуская их :) OCL - это по сути тот же язык формальной логики (переменные, предикаты). 3) Вообще, запустить и посмотреть это полезная функциональность, мы её не делали, но можно было бы сделать. Точнее правила нельзя было запускать в процессе написания. Но можно их написать, нажать кнопку генерации, загрузить тестовый документ и получить детальный HTML-отчет о валидации с возможность кликнуть на ошибку, увидеть элемент документа, для которого найдена ошибка. Увидеть какие правила успешно отработали и т.п. Ну т.е. запускать правила можно. Если что-то идёт не так, то либо правило написано неправильно, либо нужно поправить генератор.


Насчёт кодогенерации для разработчиков, а не аналитиков. Здесь история та же. На чаше весов: 1) потратить на этот проект 10 лет или 2) сделать его за год с кодогенераторами. Если в проекте возникает куча однотипного кода, то есть два способа с этим справиться:

1) Можно вынести какие-то вещи в конфиги, в аннотации. Написать интерпретатор для всего этого и в рантайме как-то обрабатывать. В определенном пространстве имен находим классы с определенными аннотациями, ищем в них методы с определенными аннотациями, ищем ещё что-то, что-то со всем этим делаем.

2) Другой вариант делать то же самое, но в design-time.

Для конкретики банальный пример. Есть много разных object mapper'ов. Их можно разделить на две категории: 1) те которые конфигурируются с помощью аннотаций, билдеров и т.п., в рантайме ищут у объектов атрибуты с одинаковыми названиями 2) те которые основаны на кодогенерации.

Как-раз 1-ый вариант обычно работает медленнее, потому что очевидно есть накладные расходы. И самое главное, чтобы понять работают они или нет их нужно запустить! Фиг знает, что там вообще происходит. А если для мепперов код сгенерен, то я просто смотрю этот код и сразу вижу что не так. И, вообще, почему вы считаете, что сгенеренный код - это что-то обязательно непонятное? У нас генерится ровно такой код (с форматированием и комментариями!), который мы написали бы вручную. Мне просто лень писать однотипный код, но если бы я его писал или если бы его писали джуны, то он был бы точно таким же с точностью до пробелов.
...
Рейтинг: 0 / 0
jdk17
    #40106014
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp,

насчет оверхеда сложный вопрос. Наверное в большинстве проектов возникает какая-то рутина в разработке. Я очень ленивый человек, писать два раза аналогичный код мне очень лень. Как только такое возникает я сразу же ищу варианты автоматизации. Если кодогенератор на 10 строк сгенерит мне 1000 строк, то какой тут оверхед. Если с нуля во всё это погружаться, то наверное, да, нужно кучу всего прочитать, попробовать кучу разных инструментов, написать кучу этих генераторов.

Чтобы показать насколько я ленивый. У нас есть конструктор инструментов моделирования, в котором можно добавляться новые нотации. Начнём с того, что в большинстве инструментов либо хрен добавишь новую нотацию моделирования, они жёстко зашиты в коде, либо в модели можно добавлять новые значки, но модели просто на уровне картинок, их потом дальше невозможно анализировать. У нас не так, каждая нотация - это полноценный язык моделирования. Отдельно описывается 1) семантическая составляющая моделей (типы объектов, типы связей, атрибуты), 2) отдельно визуальная составляющая (какие значки должны быть на диаграммах, какая палитра инструментов, что должно происходить при создании объектов, при удалении, при переприсоединении связей, какие формы свойств должны быть - короче полностью описывается редактор диаграмм со всем операциями над моделями). И 1, и 2 у нас описаны в виде моделей. Методолог может просто накликать всё это мышкой, в том числе достаточно сложные вещи (просто добавление объектов в модель, добавление объектов из справочника с помощью диалога, всякие правила валидации - что обычно реализуется в коде). Но мне на столько лень делать даже это, что написал генератор этих спецификаций редакторов диаграмм из метамоделей. И конечно это экономит кучу времени. Лень файлы локализации писать, лень типовой Java-код писать, лень документацию писать. Наверное это единственное, что движет мной в работе :)
...
Рейтинг: 0 / 0
jdk17
    #40106023
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb,
Я тоже ленивый. Только я изучаю новые технологии.
Это молодежнее))
Выше вам сказал, что большинство типовых действий с сущностью делает аннотация бута в контроллере.
То есть не надо вообще писать find сучности, удаление ит.д.
А вы это будете генерировать код генератором.
Вместо аннотации нагенерите код карл!
Если у вас много лишнего кода, может вам ЯП сменить?
Java сама по себе многословна.
Поэтому границы разумности прочертить сложно.
...
Рейтинг: 0 / 0
jdk17
    #40106024
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb
Лень файлы локализации писать, лень типовой Java-код писать, лень документацию писать. Наверное это единственное, что движет мной в работе :)
локализации пишут девочки наверно)
Документацию пишет технический писатель.
Что осталось? Типовой код?
Дык надо конкретнее.
Кому то и скобки типовой код.
...
Вам надо уйти с прогеров в консультанты и постановщики. Вот и всё.
И вам будет пофиг, есть там геттеры в каждом классе или нет.
...
Рейтинг: 0 / 0
jdk17
    #40106025
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аннотации вообще странно заходили в язык. Изначально их область применения была обще-системной.
@Override, @Deprecated и никакой возможности создать свои.

Далее "свои" были созданы. Но практика применения их была сугубо декларативна. И в этом - недостаток.
В императивном языке - декларативный подход.
...
Рейтинг: 0 / 0
jdk17
    #40106054
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня разрыв шаблона - топик Стаса со срачем на N страниц, но Стаса нет. Бывает же.
...
Рейтинг: 0 / 0
jdk17
    #40106110
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И это еще я не начал со скалой и ФП..
...
Рейтинг: 0 / 0
jdk17
    #40106116
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha
У меня разрыв шаблона - топик Стаса со срачем на N страниц, но Стаса нет. Бывает же.

Суслика видишь?
...
Рейтинг: 0 / 0
jdk17
    #40106166
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
localhost8080,

чет топик пошел не в то русло совершенно.

Уже упоминал это, поэтому повторюсь: в 2021 году нужно быть полным имбецилом, чтобы делать проекты на gradle. Изначально, когда gradle появился, там декларировались вполне себе нормальные идеи (на эту утку куча проектов повелась), сейчас же, спустя время, стало понято, что получилось полное УГ - здесь одного того, что проекты годовалой давности в IDE не открываются, вполне достаточно понять, что оно не работает.

localhost8080
нужно срочно свитчиться на 17ю


куда спешить хрен его знает, такое ощущение что 20 лет никто ничего толком не делал и все ждали, когда же 17 версия жавы релизнится, а теперь уж заживем. Так просто вопросы для справки: там вывод типов в лямбдах исправили, или нужно все равно руками кастовать, а в исключения? А в женериках уже не нужно <?> к <Object> руками приводить? А TripleFunction, TripleConsumer и пр. добавили? а какие-то идеи из vavr.io взяли?
...
Рейтинг: 0 / 0
jdk17
    #40106171
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обычно сборка проектов на gradle требует в обязательном порядке инструкции "от создателя".

И еще желательно его (создателя) тушку иметь рядом чтоб наносить удары.
...
Рейтинг: 0 / 0
jdk17
    #40106181
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Аннотации вообще странно заходили в язык. Изначально их область применения была обще-системной.
@Override, @Deprecated и никакой возможности создать свои.

Далее "свои" были созданы. Но практика применения их была сугубо декларативна. И в этом - недостаток.
В императивном языке - декларативный подход.


Аннотации позволяют создать свой метаязык, да декларативный, но в принципе достаточно функциональный.
А так, мало кого смущают императивные расширения в декларативном SQL.
Наоборот, считают что это хорошо. :-)
...
Рейтинг: 0 / 0
jdk17
    #40106403
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а на чем сейчас билдят java проекты?
...
Рейтинг: 0 / 0
jdk17
    #40106408
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul

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


Императивные расширения SQL дают пользователю SQL впечатление, что именно он управляет вычислением.
Позволяют в разговоре использовать термины вроде "алгоритм".
Умно это вообще как заход, или не очень - зависит и от точки зрения и от шаловливых ручек желающего попрактиковаться в
"алгоритмах" и "управлении вычислением".

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

Вероятно во всем нужен баланс.
Да, принято посмеиваться над использующими императивные расширения SQL персонажами (например, я как раз такой и есть) - типа - "тоже программисты".
Но использование аннотаций в неменьшей степени превращает программистов в "тоже пользователей SQL".
Обе вариации имеют продолжение в поддержке/модификации системы в связи проблемой стандартизации деклараций.

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

Во втором случае - человека заведомо нещадно побьют, если ему на самом деле взбредет в голову использовать набор
аннотаций собственного изобретения, поскольку нафиг бы они кому сдались после него.
Но и просто замена чужой, обязательной для всех к использованию, "библиотеки поддержки проекта" легко может оказываться
задачей того же уровня сложности, что и переписывание запроса/хранимой процедуры с одного диалекта SQL на другой.
...
Рейтинг: 0 / 0
jdk17
    #40106409
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby

...
Но и просто замена чужой, обязательной для всех к использованию, "библиотеки поддержки проекта" легко может оказываться
задачей того же уровня сложности, что и переписывание запроса/хранимой процедуры с одного диалекта SQL на другой.

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

Ладно, SQL на то и SQL, чтобы быть стандартным, но неповторимым.
А случае аннотаций, речь вроде идет всего лишь о замене одной одной библиотеки на другую.
Их что, специально выдумывали, чтобы привязать пользователя императивного языка к производителю библиотеки?
...
Рейтинг: 0 / 0
jdk17
    #40106425
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник
а на чем сейчас билдят java проекты?
На чем или чем?
...
Рейтинг: 0 / 0
jdk17
    #40106583
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha
забыл ник
а на чем сейчас билдят java проекты?
На чем или чем?

Ну прозвучало мнение что gradle говно. С мнением не спорю, но так как немного отстал от java мейнстрима хочу понять что изобрели взамен?
...
Рейтинг: 0 / 0
jdk17
    #40106591
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник,

Maven
...
Рейтинг: 0 / 0
jdk17
    #40106614
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Garrick
забыл ник,

Maven

В мою бытность java разработчиком gradle как раз позиционировался как замена мавену, что-то пошло не так?
...
Рейтинг: 0 / 0
jdk17
    #40106631
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник
Ну прозвучало мнение что gradle говно. С мнением не спорю, но так как немного отстал от java мейнстрима хочу понять что изобрели взамен?

ну я решил уточнить, у нас же принято в любом топике о чем угодно трындеть ;)

забыл ник
что-то пошло не так?

х.з. 99.(9)% android в принципе только на нем. Лично я, как имбецил, spring boot проекты тоже на нем собираю , про других не знаю
...
Рейтинг: 0 / 0
jdk17
    #40106643
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha
забыл ник
Ну прозвучало мнение что gradle говно. С мнением не спорю, но так как немного отстал от java мейнстрима хочу понять что изобрели взамен?

ну я решил уточнить, у нас же принято в любом топике о чем угодно трындеть ;)

забыл ник
что-то пошло не так?

х.з. 99.(9)% android в принципе только на нем. Лично я, как имбецил, spring boot проекты тоже на нем собираю , про других не знаю


Да не, все норм. Я просто думал от жизни отстал. Я и скала проекты почти все на мавене собираю)
...
Рейтинг: 0 / 0
jdk17
    #40106644
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Киллер-фича gradle - это параллельная сборка несколькими процессами ОС и поддержка их
в пуле уже запущеных процессов. Если этот функционал перенести в maven - то тогда острая
необходимость в gradle - отпадет.

Можно отдельно обсудить языковые возможности Gradle/Groovy/Kotlin стека но мне кажется что
каких-то нерешаемых задач они всё равно не решают. Всё будет сводится к кодо-генерации или
интеграции со сторонними языками и фреймворками.

В крайнем случае в maven-проекте можно создать свой кастомный плагин компилляции который
тоже самое сделает.
...
Рейтинг: 0 / 0
jdk17
    #40106665
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Меня в Maven смущали гигантские XML-конфиги, когда нужно было Xtext подключать или что-то подобное. В Gradle всё было проще и понятнее. Плюс ощущение, что Gradle всё быстрее собирал, что в нём инкрементальная сборка лучше работает. Хотя может я просто не умею настраивать Maven.
...
Рейтинг: 0 / 0
jdk17
    #40106710
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb
Меня в Maven смущали гигантские XML-конфиги, когда нужно было Xtext подключать или что-то подобное. В Gradle всё было проще и понятнее. Плюс ощущение, что Gradle всё быстрее собирал, что в нём инкрементальная сборка лучше работает. Хотя может я просто не умею настраивать Maven.


Есть две крайности:
- максимально гибкая сборка - ant, gradle, bazel
- жёсткая структура - maven

Проблема gradle - в том, что в проекте можно написать всякого добра, что потом фиг разберёшься. А главное- любая IDE так же с трудом всё это понимает и начинаются тормоза в открывании, обновлении, сборке.

Maven другая проблема - вроде открывается быстро, пока тебя устраивает жёсткие рамки системы сборки. Как нет - начинаются самописные плагины, которые при неудачном стечении обстоятельств вызывают демонов ада (Ada). И да - начинается "фиг поймёшь, что это" и "плагин устарел, а заменить не можем" - потому что плагин для мавена это тот ещё квест (грэдловый и отладить можно, в отличии от).

Оба решения так себе - надо создавать новые, которые были бы лучше. Чтобы соединить декларативное описание проекта с простотой кастомизации грэдла.
...
Рейтинг: 0 / 0
jdk17
    #40106757
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha
х.з. 99.(9)% android в принципе только на нем. Лично я, как имбецил, spring boot проекты тоже на нем собираю , про других не знаю


chpasha
с возрастом начинаешь дорожить временем - его уже слишком жалко на всякую фигню типа компиляции в командной строке и написания геттеров (а так же чтение кода с сотнями оных) ;) - мне не интересен блокнот, мне пофигу мавен или gradle, мне важно не отвлекаться от основной задачи


Чет у тебя одно другому противоречит: дорого время, но делаем на gradle
...
Рейтинг: 0 / 0
jdk17
    #40106770
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Tomin
потому что плагин для мавена это тот ещё квест (грэдловый и отладить можно, в отличии от).

Хорошая тема. У меня тоже периодически возникают вопросы к кастомным плагинам.
Думаю достойно отдельного топика.
...
Рейтинг: 0 / 0
jdk17
    #40106819
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
Чет у тебя одно другому противоречит: дорого время, но делаем на gradle
Ну на чем-то же надо - с андроидом просто выбора нет, т.е. хоть немного нужно в gradle шарить, так какой мне смысл зоопарк разводить. Оно работает и кушать не просит, что тут еще сказать. Я не могу опровергнуть то, что говоришь ты или майтон, но у меня вот так
...
Рейтинг: 0 / 0
jdk17
    #40106834
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha,
+1
В андроиде все работает из каробки потому что ни у кого и в мыслях нет что то компилировать в консоли без IDE.
В Java все по другому. Как в линуксе.
А в андроиде как в винде.
...
Рейтинг: 0 / 0
jdk17
    #40107136
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby

Но использование аннотаций в неменьшей степени превращает программистов в "тоже пользователей SQL".
Обе вариации имеют продолжение в поддержке/модификации системы в связи проблемой стандартизации деклараций.

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

Во втором случае - человека заведомо нещадно побьют, если ему на самом деле взбредет в голову использовать набор
аннотаций собственного изобретения, поскольку нафиг бы они кому сдались после него.
Но и просто замена чужой, обязательной для всех к использованию, "библиотеки поддержки проекта" легко может оказываться
задачей того же уровня сложности, что и переписывание запроса/хранимой процедуры с одного диалекта SQL на другой.


Ну в spring-boot аннотации уже не в моде.
Сейчас просто пишут стартеры.
Добавил зависимость, получил огромную часть функционала. :-)

А так аннотации вполне себе нормальное решение для использования инфраструктурного кода.
...
Рейтинг: 0 / 0
jdk17
    #40107197
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha
Ну на чем-то же надо - с андроидом просто выбора нет, т.е. хоть немного нужно в gradle шарить, так какой мне смысл зоопарк разводить. Оно работает и кушать не просит, что тут еще сказать. Я не могу опровергнуть то, что говоришь ты или майтон, но у меня вот так
Да всегда есть выбор - iOS А на самом деле у андроида своя атмосфера экосистема, и вполне возможно что использование gradle там оправдано - можно одной строкой plugins { id } настроить весь проект, однако если рассматривать не мобилки, а проекты на жаве целиком, то этой возможностью постоянно злоупотребляют, т.е. вместо того чтобы писать вменяемую документацию разработчик плагина внедряет в проект свой мусор, а бы ипись с ним как хочешь, а чтобы победить это приходится в итоге отлаживаться, например в 22387803 было утверждение, что мавеновские плагины сложнее отлаживать нежели гредловые, но конкретно я за последние лет 5 отлаживал мавеновские плагины все два раза, это были: surefire - я им в итоге ПР отправил, и liquibase - там оно не особо удобно с classpath работает, но я в итоге подстроился и забил, однако концепция gradle заключающаяся в том, что вот тут какой-то демон вызывается и рассказывает IDE о структуре проекта - это полная жопа: если что-то пошло не так, то иди и отлаживайся, в maven хотя бы живая структура проекта существует вне зависимости от того что там пейсатели плагинов сделали.

Если сравнивать gradle vs maven, то в gradle есть на мой взгляд только две фишки:
- возможность запустить конкретную задачу на чистом проекте и она все зависимости между модулями правильно соберет, в maven это выливается в конфигурацию executions, добавление плагина во все модули и в заклинания на CLI
- возможность подпереть сборку костылями в buildSrc и build.gradle

Больше никаких преимуществ у gradle нет, например: ну что-то он якобы позволяет быстрее компилировать за счет трэкинга изменений, ну во-первых, оно в большинстве случаев работает неправильно, поэтому clean наш друг навеки, во-вторых, если оно действительно долго компилируется, то это повод задуматься над другой структурой проекта. А то что они постоянно меняют API - это вообще треш и угар.
...
Рейтинг: 0 / 0
jdk17
    #40107207
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
Если сравнивать gradle vs maven, то в gradle есть на мой взгляд только две фишки:
- возможность запустить конкретную задачу на чистом проекте и она все зависимости между модулями правильно соберет, в maven это выливается в конфигурацию executions, добавление плагина во все модули и в заклинания на CLI
- возможность подпереть сборку костылями в buildSrc и build.gradle


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

Если вам не доводилось работать с проектами, которые не лезут в прокрустово ложе мавена - это не заслуга мавена, это вам просто повезло.
...
Рейтинг: 0 / 0
jdk17
    #40107209
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Tomin
Основной плюс грэдла - с ним можно собрать проект, требующий специфичной магии, типа скачивания бинарников, разные сборки под разные платформы и прочее. Более гибкий только Bazel

Если вам не доводилось работать с проектами, которые не лезут в прокрустово ложе мавена - это не заслуга мавена, это вам просто повезло.


так а зачем такие проекты делать-то? Мне однажды довелось ant на gradle переводить, вот тогда я подумал, что вот, gradle более гибок и не нужно будет структуру перелопачивать, поэтому на gradle все будет круто - лучше бы структуру переделал и на maven бы перевел. Магия со скачиванием чего-то довольно просто решается через упаковку бинарников и maven-dependency-plugin, однако даже тут я не уверен что нужно так делать а не отдать на откуп CI, сборки под разные платформы - это точно ответственность CD.
...
Рейтинг: 0 / 0
jdk17
    #40107220
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
chpasha,
+1
В андроиде все работает из каробки потому что ни у кого и в мыслях нет что то компилировать в консоли без IDE.
В Java все по другому. Как в линуксе.
А в андроиде как в винде.

Интересно. А что Android-команды никогда не используют CI/CD?
...
Рейтинг: 0 / 0
jdk17
    #40107230
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
chpasha
Ну на чем-то же надо - с андроидом просто выбора нет, т.е. хоть немного нужно в gradle шарить, так какой мне смысл зоопарк разводить. Оно работает и кушать не просит, что тут еще сказать. Я не могу опровергнуть то, что говоришь ты или майтон, но у меня вот так
Да всегда есть выбор - iOS


Да Вы что?! Вас сейчас помидорами закидают за то, что упомянули "никому не нужный и дорогущий" Apple.


Кстати говоря, вышли у них новые процессоры, которые, по сути, оставляют не у дел Intel и AMD в сфере премиальных решений для десктопа. Ну и по своей наивности полагая, что это и так понятно всем, поделился этой замечательной новостью, что, мол, невероятно - теперь в маленький ноутбук можно вместить high-end конфигурацию с невероятно низким энергопотреблением и быстродействием... и тут же услышал "Ха-ха, а кто мерял? Apple - дорогое гавно" и т.д. и т.п.

Так что чур Вас! Не упоминайте Apple никогда и ни за что. Кстати, увидите, как тут заведутся, небось. :)
...
Рейтинг: 0 / 0
jdk17
    #40107231
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
про яблоки
Большой Синий Кит
Кстати говоря, вышли у них новые процессоры, которые, по сути, оставляют не у дел Intel и AMD в сфере премиальных решений для десктопа. Ну и по своей наивности полагая, что это и так понятно всем, поделился этой замечательной новостью, что, мол, невероятно - теперь в маленький ноутбук можно вместить high-end конфигурацию с невероятно низким энергопотреблением и быстродействием... и тут же услышал "Ха-ха, а кто мерял? Apple - дорогое гавно" и т.д. и т.п.

Так что чур Вас! Не упоминайте Apple никогда и ни за что. Кстати, увидите, как тут заведутся, небось. :)


исходя из собственного опыта техника от Apple у меня служит раза в два дольше, чем ширпотреб, так что в долгосрочной перспективе разница в цене на несколько десятков процентов вполне себя оправдывает.
...
Рейтинг: 0 / 0
jdk17
    #40107232
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
PetroNotC Sharp
chpasha,
+1
В андроиде все работает из каробки потому что ни у кого и в мыслях нет что то компилировать в консоли без IDE.
В Java все по другому. Как в линуксе.
А в андроиде как в винде.

Интересно. А что Android-команды никогда не используют CI/CD?


Никогда и ни за что! :)
Настоящие андроид-программисты собирают программы исключительно в ИДЕ. У них есть специально выделенный человек-контейнер для этого - запускаешь пайплайн на Дженкинс, посылается сигнал этому человеку, что, мол, собери APK для такого-то бранча в таком-то проекте... ну этот человек берет сорсы и билдит в своей идешке, а потом подкладывает APK в нужное место и resume пайплайн.

Ну или пишут авто-скрипт для запуска ИДЕ и билда в ней апк - это уже если продвинутые.

:)
...
Рейтинг: 0 / 0
jdk17
    #40107233
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
про яблоки
Большой Синий Кит
Кстати говоря, вышли у них новые процессоры, которые, по сути, оставляют не у дел Intel и AMD в сфере премиальных решений для десктопа. Ну и по своей наивности полагая, что это и так понятно всем, поделился этой замечательной новостью, что, мол, невероятно - теперь в маленький ноутбук можно вместить high-end конфигурацию с невероятно низким энергопотреблением и быстродействием... и тут же услышал "Ха-ха, а кто мерял? Apple - дорогое гавно" и т.д. и т.п.

Так что чур Вас! Не упоминайте Apple никогда и ни за что. Кстати, увидите, как тут заведутся, небось. :)


исходя из собственного опыта техника от Apple у меня служит раза в два дольше, чем ширпотреб, так что в долгосрочной перспективе разница в цене на несколько десятков процентов вполне себя оправдывает.


аналогично
Согласен, техника Apple служит дольше, а что не менее важно, так это macOS, которая по сути затыкает за пояс остальные OS.

На днях принесли мне MacBook Air early 2015 - 2 ядра (4 с гипертредингом), 4 гига 1600 памяти с yosemite. Люди используют его по большей части только для серфинга в инете и как печатную машинку.
Попросили актуализировать - обновил до BigSur - жуть, все работает и не тормозит. После запуска системы занят 2.3 гига оперативки, 1.6 гига свободно, никакого свопа. Система живая - отклик хороший.

Как-то так.
...
Рейтинг: 0 / 0
jdk17
    #40107234
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
исходя из собственного опыта техника от Apple у меня служит раза в два дольше, чем ширпотреб, так что в долгосрочной перспективе разница в цене на несколько десятков процентов вполне себя оправдывает.
это как покупать дорогие ботинки, в которых можно ходить 10 лет, ничего, что на вид будут поношены, и не модны, а то и нога распухнет от возраста....
проще чаще покупать несколько раз дешёвые, и иметь чаше обновку, модную...
...
Рейтинг: 0 / 0
jdk17
    #40107241
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя

проще чаще покупать несколько раз дешёвые, и иметь чаше обновку, модную...

На счёт "модной" это как раз наоборот
...
Рейтинг: 0 / 0
jdk17
    #40107242
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
PetroNotC Sharp
chpasha,
+1
В андроиде все работает из каробки потому что ни у кого и в мыслях нет что то компилировать в консоли без IDE.
В Java все по другому. Как в линуксе.
А в андроиде как в винде.

Интересно. А что Android-команды никогда не используют CI/CD?

а разве с CI связано что стадия разработки в Java происходит ВНЕ IDE
а в андроиде только в IDE?
Имхо CI вообще ни при чём.
Java вернулась в прошлое тысячилетие. А гугл был всегда впереди).
В Java стало как в DOCe
- скачали стартер бута
- в командной строке ввели
- "всё стало зелёным" )))
...
Рейтинг: 0 / 0
jdk17
    #40107246
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
Андрей Панфилов
исходя из собственного опыта техника от Apple у меня служит раза в два дольше, чем ширпотреб, так что в долгосрочной перспективе разница в цене на несколько десятков процентов вполне себя оправдывает.
это как покупать дорогие ботинки, в которых можно ходить 10 лет, ничего, что на вид будут поношены, и не модны, а то и нога распухнет от возраста....
проще чаще покупать несколько раз дешёвые, и иметь чаше обновку, модную...


Покупайте, так и быть. :)
...
Рейтинг: 0 / 0
jdk17
    #40107272
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
так а зачем такие проекты делать-то?


Они разные бывают.
Иногда нужно использовать нативные компоненты. Иногда их надо прямо тут собирать.

Вообще если задуматься - можно бы всё решить плагинами мавена, но почему-то под андроид и котлин-мультиплатформ их нет.
...
Рейтинг: 0 / 0
jdk17
    #40107345
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Большой Синий Кит
теперь в маленький ноутбук можно вместить high-end конфигурацию

наконец-то идея перестанет тормозить

mayton
Интересно. А что Android-команды никогда не используют CI/CD?

с чего такие дикие выводы. с gradle в командой строке все ок, проблемы с ним если и есть, то как правило, в интеграции с IDE, я бы даже сказал, что чаще всего (лично у меня) с Android+IDE - там все сильно сложнее, чем в каком-нибудь спрингбут-проекте т.к. андроид-плагин делает овердофига магии
...
Рейтинг: 0 / 0
jdk17
    #40107370
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha

с чего такие дикие выводы. с gradle в командой строке все ок, проблемы с ним если и есть, то как правило, в интеграции с IDE, я бы даже сказал, что чаще всего (лично у меня) с Android+IDE - там все сильно сложнее, чем в каком-нибудь спрингбут-проекте т.к. андроид-плагин делает овердофига магии

Я - ХЗ. Я просто спросил Petro. Я не знаю как они там игровые проекты собирают.
...
Рейтинг: 0 / 0
jdk17
    #40107532
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha
Большой Синий Кит
теперь в маленький ноутбук можно вместить high-end конфигурацию

наконец-то идея перестанет тормозить


Я считаю, что в подавляющем большинстве случаев тормозят не программы, а пользователи. И это никак не исправить.
...
Рейтинг: 0 / 0
jdk17
    #40107541
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Большой Синий Кит
Я считаю, что в подавляющем большинстве случаев тормозят не программы, а пользователи.
"Вамхарашо" (ц) "Операция "С Новым Годом"".
В моей эпсилон окрестности тормозят именно "программы". "Магия данных".
...
Рейтинг: 0 / 0
jdk17
    #40107546
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нам очень сложно будет подшить тормоза IDE к провалу проекта например.
...
Рейтинг: 0 / 0
jdk17
    #40107784
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Нам очень сложно будет подшить тормоза IDE к провалу проекта например.


Ну сваливать отсутствие профессионализма на тормозящее ПО - это глупость *в принципе*.

Кстати говоря, нужно ведь и уметь пользоваться:. это всего касается: и ПО, и каких-то строительных инструментов.

Я знаю *программистов*, имеющих прекрасный сетап, но при этом у них почему-то вечно все виснет, не работает, тупит, перезагружается и т.п.
По какой причине - даже не знаю.. может, глупые? :) есть ведь глупые доктора, инженеры.

Кстати, важно еще понимать, что, устанавливая взломанное ПО, вы потенциально начинаете для кого-то майнить какие-нибудь коины. Может, из-за этого тормозит ПО, система? :)
...
Рейтинг: 0 / 0
jdk17
    #40107795
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не думаю что java - подходящая среда для майнинга.

Кстати в плане энергетики майнинг - это самая затратная вещь. Я вот думаю что капец криптовалютам
настанет когда совокупная часть энергопотребления на поддержку транзакций будет серъезно бить
по экономике некоторых стран.

Или надо поменять концепцию. Proof-of-work заменить на .... proof-of-чего-нибудь другое. Да и вообще.
Использовать чейны блоков для других дел. Вести реестры и т.п.
...
Рейтинг: 0 / 0
jdk17
    #40107803
Никанор Кузьмич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Я не думаю что java - подходящая среда для майнинга.
Вы просто не умеете его готовить. Любая среда подходящая, если она бесплатная. Я еще несколько лет назад слышал про майнинг джаваскриптом на странице. Вы внедряете свой код на чью-то страницу, кто-то эту страницу открывает, майнинг идет. JS в браузере - это медленно и неэффективно? Зато бесплатно. Я так понял, Большой Синий Кит говорил про такой "кукушечный" способ майнинга. А уж если своему процессу-подкидышу еще и приоритет можно понизить, то пользователь вообще никогда ничего не заметит.
...
Рейтинг: 0 / 0
jdk17
    #40107815
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никанор Кузьмич,

Все верно. Только тот же майнинг может идти в том же процессе - почему бы и нет. Думаю, просто создают отдельный поток и все.

По поводу веб майнинга, кстати, давно есть “no coin” фильтры во всякого рода AdBlockers
...
Рейтинг: 0 / 0
jdk17
    #40107819
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
proof-of-чего-нибудь другое
proof-of-какая-нибудь_математическая_теорема. А доказательство должно быть на языке типа Isasbelle HOL, чтобы его можно было формально проверить. Тогда за год-другой формализуют всю математику, а системы автоматического доказательства достигнут космической крутости.

Например, есть сайт . Это типа leetcode для математиков. Только на leetcode фиг его знает корректно работает алгоритм или нет, тесты проходит, по времени и памяти укладывается в лимиты и ладно. А на Proving for Fun нужно формально доказать теорему для всего множества значений, без всяких тестов.
...
Рейтинг: 0 / 0
jdk17
    #40107822
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никанор Кузьмич
mayton
Я не думаю что java - подходящая среда для майнинга.
Вы просто не умеете его готовить. Любая среда подходящая, если она бесплатная. Я еще несколько лет назад слышал про майнинг джаваскриптом на странице. Вы внедряете свой код на чью-то страницу, кто-то эту страницу открывает, майнинг идет. JS в браузере - это медленно и неэффективно? Зато бесплатно. Я так понял, Большой Синий Кит говорил про такой "кукушечный" способ майнинга. А уж если своему процессу-подкидышу еще и приоритет можно понизить, то пользователь вообще никогда ничего не заметит.

Кукушка на JS не соберет много даже за сутки майнинга. Сейчас майнерам даже видеокарт мало. Они покупают
спец-железо которое только и заточено на решение одной узкой задачи.

Лет несколько назад когда был анонсирован Web-Assembly, на эту тему было бы
интересно поговорить.
...
Рейтинг: 0 / 0
jdk17
    #40107824
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton

Кукушка на JS не соберет много даже за сутки майнинга.

Как говорится, "С Миру по нитке..."
...
Рейтинг: 0 / 0
jdk17
    #40107825
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb
mayton
proof-of-чего-нибудь другое
proof-of-какая-нибудь_математическая_теорема. А доказательство должно быть на языке типа Isasbelle HOL, чтобы его можно было формально проверить. Тогда за год-другой формализуют всю математику, а системы автоматического доказательства достигнут космической крутости.

proof-of-rank. Предлагает некий "кибердед". Понятия не имею кто это. Но вот услышал недавно.

[spoiler]
YouTube Video
...
Рейтинг: 0 / 0
jdk17
    #40107830
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Garrick
mayton

Кукушка на JS не соберет много даже за сутки майнинга.

Как говорится, "С Миру по нитке..."


Именно! В этом и суть.
Это касается любых распределенных вычислений: есть целые научные программы, после присоединения к которой устанавливаешь на свой комп их ПО и даешь свои вычислительные мощности им, причем там все настраиваемо: когда, сколько и т.п.
...
Рейтинг: 0 / 0
jdk17
    #40107994
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Большой Синий Кит
Garrick
пропущено...

Как говорится, "С Миру по нитке..."


Именно! В этом и суть.
Это касается любых распределенных вычислений: есть целые научные программы, после присоединения к которой устанавливаешь на свой комп их ПО и даешь свои вычислительные мощности им, причем там все настраиваемо: когда, сколько и т.п.

Я согласен что это интересно и забавно. Просто я-бы не вкладывался в браузерз как клиент майнинга.
Время генерации (подписания) блока в Биткоине сегодня составляет примерно 10-15 минут. И следовательно
эти 10-15 минут браузеры должны быть открыты и должны хотя-бы интерактировать по сети с инфраструктурой
проксей или хабов для таких браузерных майнеров.

Очень маловероятно что за 10 минут JS приложение решит задачу которую сегодня с трудом решают на стеках
С++/CUDA/OpenCL/ASIC.

При слабом и ненадёжном клиенте майнинга я-бы просто не вкладывался в эту задачу. Вот как-то так.
...
Рейтинг: 0 / 0
jdk17
    #40107998
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Так для вас работает не один браузер, понимаете? - а десятки/сотни тысяч, например. Клиент заходит, подгружает скрипт - и все, он готов выполнять юнит вычислений.
...
Рейтинг: 0 / 0
jdk17
    #40108002
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

P.S.
Вы бы не вкладывались?! Это же золотое дно: главное иметь возможность разбить вычисление на как можно большее количество юнитов. И чем большее разбитие возможно - тем лучше.
...
Рейтинг: 0 / 0
jdk17
    #40108010
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я понимаю экстенсивную модель майнинга. Чем больше узлов на тебя работает - тем больше вероятность
получить комиссию. Просто браузер ... такое себе.

Кстати как в JS можно делать булевы операции над массивами бит?
...
Рейтинг: 0 / 0
jdk17
    #40108011
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Кстати как в JS можно делать булевы операции над массивами бит?
webasm пишется на С. работает в отдельном потоке.
предназначен для вычислений
...
Рейтинг: 0 / 0
jdk17
    #40108013
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
mayton
Кстати как в JS можно делать булевы операции над массивами бит?
webasm пишется на С. работает в отдельном потоке.
предназначен для вычислений

А есть пример hello-world или quick-start чтоб показать?
...
Рейтинг: 0 / 0
jdk17
    #40108020
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
А есть пример hello-world или quick-start чтоб показать?
что-то есть, но я ещё не смог врубиться что для этого надо, какой комплект ide и прочее.
потому как webasm не очень подходит для работы с dom - поэтому большой нужды нет....
...
Рейтинг: 0 / 0
jdk17
    #40108042
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
mayton
А есть пример hello-world или quick-start чтоб показать?
что-то есть, но я ещё не смог врубиться что для этого надо, какой комплект ide и прочее.
потому как webasm не очень подходит для работы с dom - поэтому большой нужды нет....

Я как только новость про webassembly прочтал (несколько лет назад) так первая идея
приминения и была - майнинг.

Потому как в визуальном плане браузер достиг более менее совершенства. Даже игрушки в unity/webgl
можно делать.

И куда впихнуть вычислительную мощность без визуальной составляющей? ХЗ. Только в распределенные
вычисления.

Вообще конечно с пользовательской точки зрения не стоит нагружать браузер такой платформой. И так
бедные ноутбуки перегреваются и батарея в п..зду уходит. Так что такие штуки антивирус по идее
должен считать вредными. Я еще не знаю как он будет детектить. По загрузке CPU чтоли.
Но как-то надо такие активности отсекать.
...
Рейтинг: 0 / 0
jdk17
    #40108052
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
И куда впихнуть вычислительную мощность без визуальной составляющей? ХЗ. Только в распределенные
вычисления.
и я, и я.. того же мнения...

была информация про возможности работать с канвас в воркере - вот это интересно (правда про хром было)
хотя тоже не очень большой выигрыш по времени получается
...
Рейтинг: 0 / 0
jdk17
    #40108065
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Большой Синий Кит
mayton,

Так для вас работает не один браузер, понимаете? - а десятки/сотни тысяч, например. Клиент заходит, подгружает скрипт - и все, он готов выполнять юнит вычислений.


думаю просто генерят тысячные доли в надежде что когда нибудь биток до 1млн дорастет. По обыкновение отчего бы не написать майнинг в js, такой себе челендж. Десятки других программ, ну например CRM всякие, тоже пишут новые ежегодно о которых никто никогда не узнает и которые умирают не привлекая внимания. Там уже готовые скрипты есть бери и ставь на сайт главное чтоб в гугле не забанили. успевай себе менять домены (успевай намайнить больше прежде чем забанили)

это жестокий и конкурентный бизнес.
...
Рейтинг: 0 / 0
jdk17
    #40108066
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
вадя
пропущено...
что-то есть, но я ещё не смог врубиться что для этого надо, какой комплект ide и прочее.
потому как webasm не очень подходит для работы с dom - поэтому большой нужды нет....

Я как только новость про webassembly прочтал (несколько лет назад) так первая идея
приминения и была - майнинг.

Потому как в визуальном плане браузер достиг более менее совершенства. Даже игрушки в unity/webgl
можно делать.

И куда впихнуть вычислительную мощность без визуальной составляющей? ХЗ. Только в распределенные
вычисления.

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


бытует мнение что такие штуки как webassembly сделаны для того чтобы антивирус не смог их забанить. Например вот такой вот антивирус, установленный у половины планеты AdBlock, Ublock.
...
Рейтинг: 0 / 0
jdk17
    #40108073
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это - война брони и снаряда. Она - вечная. Я просто пытаюсь понять как например может работать детектирование
угрозы. Ну ... зашел ты на какой-то новостной сайт или таблоид. Но запустился webasm скриптик. Начал что-то там
тихо майнить. В какой момент времени можно будет точно определить что это вреднонсный скрипт? Я думаю что
тут просто 1-2 rule не достаточно.
...
Рейтинг: 0 / 0
jdk17
    #40108085
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

у webasm куча ограничений по безопасности, поэтому особо бояться нечего
...
Рейтинг: 0 / 0
jdk17
    #40108086
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Батарея мать ее...
...
Рейтинг: 0 / 0
jdk17
    #40108087
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Батарея мать ее...
ну вот тут я не уверен что этим её можно изнахратить особо. это при большом желании - всё возможно.
счас больше потребляет когда страница рендерится на клиенте всякими реактами и пр.
...
Рейтинг: 0 / 0
jdk17
    #40108090
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну я не знаю как реакт работает. Но он отрендерил - и достиг стационарного состояния. И встал.
Событий нет - нет активности. Только гифки и видосы.

А майнинг - он бесконечен. И грузит процессор без ограничений. Собсно это и есть его главная
задача. Решать крипто-задачку как можно быстрее. Не успел блок решить - бери следующий блок.
...
Рейтинг: 0 / 0
jdk17
    #40108138
Bsplesk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
del
...
Рейтинг: 0 / 0
jdk17
    #40108148
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Но он отрендерил - и достиг стационарного состояния.

mayton
А майнинг - он бесконечен.

если это сравнивать - то да. к сожалению на смартах оценить нагрузку можно только по нагреву и скорости падения заряда. на десктопах есть диспетчеры задач, можно оценить что работает больше.
mayton
Но он отрендерил
если серфиш и каждый сайт прежде чем показать страницу рендерит json - тоже мало не покажется, да ещё и время отображения...
...
Рейтинг: 0 / 0
jdk17
    #40108181
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя

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

Я думаю что майнинг на смартфоне еще более невыгоден. Там - куча энергосберегающих технологий.
...
Рейтинг: 0 / 0
jdk17
    #40108191
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Я думаю что майнинг на смартфоне еще более невыгоден. Там - куча энергосберегающих технологий.
ну если их запитать от сети, может и станет выгодным - процессора хорошие, памяти прилично - может здря не пробовали
...
Рейтинг: 0 / 0
jdk17
    #40108194
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там по идее майнить должен не основной процессор а ядра видяшки. Какая там видяшка? ХЗ.
Вот в моём сяоми стоит Mali-G52.

Нагрузки на память вроде не должно быть.
...
Рейтинг: 0 / 0
jdk17
    #40108204
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
а ядра видяшки
видяшка просто быстее, но если на js hf,jnftn - то почему на прце смарта не пробовать?
ферма из нескольких сотен самсунгов, или ксиоми
компактно.
...
Рейтинг: 0 / 0
jdk17
    #40108207
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Остался пустяк. Как всем впарить эту ссылку.
...
Рейтинг: 0 / 0
jdk17
    #40108230
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
mayton
а ядра видяшки
видяшка просто быстее, но если на js hf,jnftn - то почему на прце смарта не пробовать?
ферма из нескольких сотен самсунгов, или ксиоми
компактно.


Потому что люди попробовали и получилось грустно, в году эдак в 2010 еще можно было. но тогда не было arm72. Сейчас есть arm72 но уже нет 2010 года :)
По той же причине почему и ложкой огород копать не стоит, а лопатой есть суп. Вроде можно, но целесообразность вызывает сомнения.

Ферма из 300 сотен самсунгов ака samsum s20e например по 45тыр будет в 13_500_000
это гдето 65 видеокарт 3080 гдето по 200тыр

Можно например зайти в ДНС и спросить почему samsung s20e а наличии имеется а видеокарты rtx3080 все еще нет.
...
Рейтинг: 0 / 0
jdk17
    #40108237
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lleming,

это конечно верно. но потребление видях намного больше.
с другой стороны - если вмдяхи такие быстрые, почему на их основе нет материнок?
...
Рейтинг: 0 / 0
jdk17
    #40108268
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
lleming,

это конечно верно. но потребление видях намного больше.
с другой стороны - если вмдяхи такие быстрые, почему на их основе нет материнок?


По той же причине по которой суп не едят вилкой а огород не копают ложкой.
...
Рейтинг: 0 / 0
jdk17
    #40108271
Никанор Кузьмич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
с другой стороны - если вмдяхи такие быстрые, почему на их основе нет материнок?
Рендеринг 3D на уровне алгоритмов состоит почти исключительно из сложения и перемножения матриц чисел размером 4х4. Процессор в видяхе заточен на проведение только этих операций и выполняет их на порядки быстрее, чем процессор общего назначения. Но любые другие операции он выполняет намного хуже. Соответственно, на видеокарты переносят те алгоритмы, которые можно свести к перемножению матриц. Но далеко не все алгоритмы можно так преобразовать.
...
Рейтинг: 0 / 0
jdk17
    #40108272
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lleming
По той же причине по которой суп не едят вилкой а огород не копают ложкой.
вроде как и майниг на js, однако он существует.
то что счас это не делают - не значит, что не будут делать. время покажет.
...
Рейтинг: 0 / 0
jdk17
    #40108286
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никанор Кузьмич

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

Нет. Он всё таки чуть более универсален.
...
Рейтинг: 0 / 0
jdk17
    #40108288
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя

это конечно верно. но потребление видях намного больше.
с другой стороны - если вмдяхи такие быстрые, почему на их основе нет материнок?

Они не быстрые. Там просто на одном кристалле собрано много мелких АЛУ (thread)
которые делают простые операции. Они получают общее задание типа
рендеринг 1 кадра изображения и далее распараллеливают его на всех.
Кадр скорее всего бъётся на сегменты и каждый thread делает узкую
задачу. Например красит полосочку полигона алгоритмом Гуро.

Построить какую-либо универсальную архитектуру на таких мелких АЛУ
вряд-ли получится. Тут скорее всего самая главная проблема как всегда
лежит в нас. В разработчиках. Большинство алгоритмов для бизнеса
например нихрена не параллелятся так чтобы получить одно задание
и рендерить его со скоростью 120 fps. А рендеринг графики - это узкая
задача. Которая имеет мало I/O и мало внутренних блокировок и синхронизаций.

С генерацией подписей для битка - получилось удачно. А просто обобщённый
алгоритм вы нихрена ни перенесете на графические процессоры.
...
Рейтинг: 0 / 0
jdk17
    #40108289
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не в курсе на каких видяшках щас майнят. Но еще несколько лет назад
слышал что не на видяшках а на таких себе узких устройствах типа такого

https://www.ixbt.com/news/2021/04/25/asic-bitmain-antminer-e9-25-geforce-rtx-3090-115-cmp-30hx-240.html

Они вроде эффективнее и экономнее ферм из видяшек - но есть другой недостаток.
Обычно заточены на 1 алгоритм. И если биток провалится в какое-то дно-днищенское
то заменить его оперативно на новую валюту будет либо сложно либо невозможно.
...
Рейтинг: 0 / 0
jdk17
    #40108321
localhost8080
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мы попробовали на 17 залететь,сразу словили баг с десериализацей,понятно что виной всему jackson - но пока еще видимо рано - мало кто успел релизнутся на 17 версию

месяца 2-3 наверно еще нужно подождать,хотя это конечно печаль - у меня сейчас например глобальный рефакторинг - и вот свитч с патерн матчингом + запечатнные классы это вот то что мне просто необходимо + рекоды

делаю зачем то работу двойную ибо на 17 джаве все придется переписывать...
...
Рейтинг: 0 / 0
jdk17
    #40108372
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я как-то нейтрально отношусь ко всем этим синтаксическим изыскам. На Java 1.8 вполне комфортно, Stream API или Time API были действительно существенным улучшением. Всё равно до C# ещё очень далеко в плане всей этой синтаксической жести. Когда писал на C# я конечно всем этим пользовался, но не могу сказать, что в Java очень скучаю по этому.

Мне вообще из языков больше всего нравится Lisp. Для Java и C# это недостижимый идеал. И, как это не удивительно, нравится JavaScript, потому что он духом напоминает Lisp. Какие-то извращенцы любители C#/Java/... придумали TypeScript, который нивелирует многие преимущества JavaScript. Ещё нравится Isabelle HOL, там фактически в каждой теории можно создавать свой язык со своим синтаксисом. А в Java/C#/... все эти синтаксические фишечки на мой взгляд особой погоды не делают.
...
Рейтинг: 0 / 0
jdk17
    #40108380
localhost8080
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ares_ekb
Я как-то нейтрально отношусь ко всем этим синтаксическим изыскам. все эти синтаксические фишечки на мой взгляд особой погоды не делают.

Еще как делают- патерн матчинг не только синтаксический изыск - это реализация патерна посетитель,который широко применятеся везде ,где есть развитые иерархии классов
...
Рейтинг: 0 / 0
jdk17
    #40108382
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb

Мне вообще из языков больше всего нравится Lisp. Для Java и C# это недостижимый идеал. И, как это не удивительно, нравится JavaScript, потому что он духом напоминает Lisp. Какие-то извращенцы любители C#/Java/... придумали TypeScript, который нивелирует многие преимущества JavaScript. Ещё нравится Isabelle HOL, там фактически в каждой теории можно создавать свой язык со своим синтаксисом. А в Java/C#/... все эти синтаксические фишечки на мой взгляд особой погоды не делают.

Common-Lisp, или какой-то коммерческий?
...
Рейтинг: 0 / 0
jdk17
    #40108389
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alegro, sbcl,
...
Рейтинг: 0 / 0
jdk17
    #40108392
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По хорошему завидую. Я единственное промышленное применение лиспу видел только в AutoCAD.
Да и то там был какой-то свой собственный ограниченный лисп для чертежей.
...
Рейтинг: 0 / 0
jdk17
    #40108412
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
lleming
По той же причине по которой суп не едят вилкой а огород не копают ложкой.
вроде как и майниг на js, однако он существует.
то что счас это не делают - не значит, что не будут делать. время покажет.


ну около тысячи лет прошло с момента появления вилки, а с момента появления ложки (ну или чтото ей подобное) наверное уже не одна тысяча лет.

Думаешь будущее уже рядом? Совсем недолго осталось как ложки перекочуют в сельское хозяйство и они окончательно исчезнут из столовых приборов ?

Не хочется тебя расстраивать и разрушать твой оптимизм
...
Рейтинг: 0 / 0
jdk17
    #40108421
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

к сожалению только Lisp как идея, потому что в коммерческой разработке я его никогда не использовал. Common Lisp слишком большой и там много странных вещей. Scheme нравится больше, он более компактный, но не нравятся гигиенические макросы (define-syntax и т.п.) или я их не понимаю, это кажется усложнением. Наверное больше всего нравится Arc, но он вообще нигде не используется. Clojure и Racket выглядят интересно, но их толком не смотрел. Конечно у меня есть и своя реализация Lisp :) По смыслу она похожа на Arc. В качестве среды разработки, файлового менеджера, NNTP-клиента, браузера и т.п. у меня был конечно Emacs, а в качестве оконного менеджера Sawfish.

Мне в лиспе нравится минимализм, что в него не пытаются запихать всё, что только возможно. Всякие синтаксические вещи, проверки типов и т.п. добавляются самими программистами. Не нужно бороться с синтаксисом языка, ждать 10 лет, когда в него подвезут какой-нибудь pattern-matching. Придумывать всякие костыли, чтобы на этапе компиляции обойти ограничения языка или наоборот добавить какую-то логику (как только люди не исхищряются с template в C++). Мне когда-то очень давно нравился C++, потом я прочитал книгу Александреску, его Loki мне казалась чем-то очень клевым. А потом я познакомился с другими языками и понял, что всё это просто борьба с ограничениями языка.

В итоге я пришёл к тому, что чем меньше всей этой фигни в языке (разные синтаксические конструкции, статическая типизация и т.п.), тем лучше. В JavaScript как-раз всего этого нет и код писать проще. Если где-то нужны проверки, то можно просто определить какую-нибудь функцию assert или несколько её вариантов для разных случаев и добавлять где требуется. Либо ошибки должны выявляться анализаторами кода. Хотя я не могу сказать, что и статическая типизация - абсолютное зло. Но просто если не получается сделать какую-нибудь специфическую иерархию классов с generic'ами и т.п., то и фиг с ней, можно и в рантайме проверять что требуется.

Ещё одна идея, которая мне нравится в лиспе - это отношение к написанию кода как к созданию своего DSL. Скажем, у меня приложение работает с моделями. Для лиспа естественно определить несколько примитивных методов для запросов к этим моделям, для изменения моделей. На основе простейших функций определить более сложные и т.д. В итоге получится внутренне API, минифреймвок для работы с моделями. И всё приложение состоит из таких микрофреймвоков. Это звучит вроде совершенно логично. Но, блин, большинство Java- и других разработчиков, с которыми я сталкиваюсь, пишут код совершенно иначе. Обычно это какой-нибудь класс с кучей полей. В одном методе устанавливаем одно поле, потом вызываем другой метод, в котором читаем это поле и устанавливаем ещё какие-то поля. Сами методы - это куча вложенных циклов, if-ов. Полная каша, в которой вообще ничего невозможно понять. Если капнуть, то оказывается, что эти поля вообще не нужны (потому что они используются просто для передачи данных между методами, а не для хранения долговременного состояния объекта), все эти безумные вложенные циклы можно разбить на несколько повторно используемых методов.

В общем что нравится:
1) Минимализм, пусть лучше в языке вообще ничего не будет, чем ждать какой-нибудь очередной синтаксический сахар годами. Например, в JavaScript нет ни Stream API, ни LINQ, но есть итераторы и этого достаточно, чтобы сделать своё Stream API. Или без классов вполне как-то обходились
2) Отношению к языку не как к данности, что если что-то нельзя написать, значит это что-то неправильное. Может просто язык стрёмный
3) Построение кода из небольших самостоятельных блоков (микро-DSL, микрофреймвоков, внутренних API). Люди, которые ни на чём кроме Java не писали, либо впадают в ступор, когда чего-то нет в стандартной библиотеке, либо пишут какой-то лапшакод
4) Конечно же уникальная штука - это макросы. В других языках это решается костылями в виде препроцессоров, шаблонов, рефлексии, аннотаций, кодогенерации, добавления синтаксического мусора, систем типов, а в лиспе всё это закрывается одной конструкцией
...
Рейтинг: 0 / 0
jdk17
    #40108446
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
localhost8080
патерн матчинг не только синтаксический изыск - это реализация патерна посетитель
Ну, без паттерн-матчинга раньше же как-то обходились. В EMF такой код вообще писать не нужно, там из модели генерится иерархия Java-классов, вспомогательные классы, в том числе Switch-класс.

Например вот:

1) Есть модель . В виде XML-файла она выглядит страшно, но по сути это просто диаграмма классов с наследованием, атрибутами, связями между классами.

2) Из этой модели они сгенерили тонны Java-классов и интерфейсов.

3) В том числе сгенерили и такой класс . Да, в нём куча switch/case и if, но какая разница, сопровождать его всё равно не нужно. Если изменится модель, то все эти классы они просто перегенерят. Причём сейчас этот класс можно сгенерить с паттерн-мэтчингом вместо if. Достаточно чуток изменить шаблон кода и нажать кнопку.

4) Затем мы просто наследуемся от этого сгенеренного класса и переопределяем нужные case-методы.


Если модель, для которой нужен visitor достаточно большая, то наверное, да, паттерн-матчинг позволит сделать visitor немного компактнее и надёжнее (мы на этапе компиляции будем знать, что не забыли в коде обойти какие-то классы). Но, на мой взгляд, visitor - это абсолютно типовой код, который нужно генерить и дописывать чего не хватает.

Хотя, блин, на самом деле здесь не совсем visitor, а просто switch. И благодаря паттерн-матчингу этот Switch-класс больше не нужен, сейчас действительно этот код можно писать проще, хотя благодаря кодогенерации люди и раньше не особо напрягались, но сейчас и кодогенерация не нужна. Но если нам нужен не просто switch, а более сложный visitor, который рекурсивно обходит дерево, т.е. смотрит какие у объекта вложенные объекты, переходит к ним и так далее, то здесь кодогенерация может и пригодиться, а на голом паттерн-матчинге запаришься писать столько кода.

Опять-таки, возвращаясь к лиспу, там вообще таких проблем нет. Не нужно ни ждать много лет паттерн-матчинга, ни генерить код, всё решается макросами. А в Java остаётся либо мучаться и ждать, либо просто генерить нужный код.
...
Рейтинг: 0 / 0
jdk17
    #40108449
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb

В итоге я пришёл к тому, что чем меньше всей этой фигни в языке (разные синтаксические конструкции, статическая типизация и т.п.), тем лучше. В JavaScript как-раз всего этого нет и код писать проще. Если где-то нужны проверки, то можно просто определить какую-нибудь функцию assert или несколько её вариантов для разных случаев и добавлять где требуется. Либо ошибки должны выявляться анализаторами кода. Хотя я не могу сказать, что и статическая типизация - абсолютное зло. Но просто если не получается сделать какую-нибудь специфическую иерархию классов с generic'ами и т.п., то и фиг с ней, можно и в рантайме проверять что требуется.

Да. В JavaScript есть memory-model напоминающая дерево объектов с полями и ссылками на функции. Есть в этом
что-то от вложенных списков Lisp. Но наблюдая за тем как работают сами JS-разработчики я вижу что они
практически не могут создать сколь-либо внятного фреймворка. Типичная ситуация - с утра фронт-кодер
решает делать свой фреймворк на JS. И вечером он его уже заканчивает. И следующим утром он его выбрасывает
в мусорное ведро и... садится писать новый. Тоесть я вижу что % повторного использования кода в JS очень низок.
Или... очень низка культура передачи знаний на уровне библиотек и фреймворков. В Java к примеру есть абстракции
такие как abstract class, interface, package, bundle, module(java9). Это всё способсвтует разделению декларативной
части и реализации. И соблюсти этот баланс в языках - большое искусство. Чтоб интерфейс не был доминирующим
или раздражающим (как в доисторических Java Beans). Вот мне сегодня если надо затащить в проект какую-то либу
(ну например по работе с NoSQL БД) - лучше всего взять java реализацию. Потому-что я за 15 минут освою интерфейсы
и уже буду видеть с helicopter-view то что мне надо для реализации. Подобный челлендж в С++ например чреват
ковырянием в обще-системных вещах что отвлекает от главной задачи. Или в go или rust интерфейсная часть будет
не так явно выражена и ее еще надо будет визуально найти и осмыслить. Сколько я ни ругал ООП а всё таки
есть у него сильная сторона. Скорость освоения библиотеки.

Как я буду осваивать новую библиотеку на JS - ХЗ. Мне - неудобно отсутствие типов. И мне нужно
понимать где начинается контекст или жизненный цикл объектов с которыми я должен работать.
...
Рейтинг: 0 / 0
jdk17
    #40108450
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb
Если капнуть, то оказывается, что эти поля вообще не нужны (потому что они используются просто для передачи данных между методами, а не для хранения долговременного состояния объекта), все эти безумные вложенные циклы можно разбить на несколько повторно используемых методов.

Я думаю что насчет полей вы скорее всего ошибаетесь.

А безумные вложенные циклы в Java-Enterprise разработке тоже являются анти-паттерном и от них избавляются.
Возможно если вы покажете код - я пойму в чем было дело. Но вот другие практики - такие как инлайнинг или rollup
циклов - в Java делать не принято.

Также принято делать компактные строки кода (по 1 оператору на линию). Это упрощает дебаггинг
и помогает при git merge. Тоесть такой кейс как написать лямбду в 80 символов длиной - это скорее
плохой чем хороший кейс.

Вообще главная цель - обеспечить читаемость кода другим человеком. А уж компиллятор как нибудь разберется.
Это кстати сказал Мартин Фаулер. Код пишется человеком для людей.
...
Рейтинг: 0 / 0
jdk17
    #40108451
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

я думаю, что подавляющее большинство JavaScript-библиотек - это просто ужас. Есть исключения типа d3, она построена на одной понятной идее и всё вокруг неё крутится.

Вопрос нужны ли для JavaScript вообще какие-то фреймвоки. HTML, CSS, SVG и стандартные API (WebGL, ...) позволяют делать крутейшие вещи, которые на каком-нибудь SWT запаришься делать. На мой взгляд, приложение в принципе должно состоять из микрофреймвоков. Если нет хороших готовых, то остаётся писать свои. Правда нет гарантии, что получится лучше :)
...
Рейтинг: 0 / 0
jdk17
    #40108455
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb

1) Минимализм, пусть лучше в языке вообще ничего не будет, чем ждать какой-нибудь очередной синтаксический сахар годами. Например, в JavaScript нет ни Stream API, ни LINQ, но есть итераторы и этого достаточно, чтобы сделать своё Stream API. Или без классов вполне как-то обходились

Я, читая книжку SICP изучал mit-scheme. Ни для какой-то цели. Просто так. Как забавный мозговой эксперимент.
Тоесть я вообще не ставил цели использовать ским ни в какой продуктовой разработке. Просто проверял себя
чтобы не заржавел. Так вот списки и ленивые списки всё таки различаются по конструированию.

Обычное конструирование списков
Код: java
1.
(cons ...)


ленивое
Код: java
1.
(cons-stream ...)



В противоположность в Haskell например все списки изначально декларированы как ленивые и stream api - органичен.

Код: java
1.
2.
3.
Prelude> let x = [ x | x <- [2..], (mod x 2) /= 0, (mod x 3) /= 0]
Prelude> take 100 x
[5,7,11,13,17,19,23,25,29,31,35,37,41,43,47,49,53,55,59,61,65,67,71,73,77,79,83,85,89,91,95,97,101,103,107,109,113,115,119,121,125,127,131,133,137,139,143,145,149,151,155,157,161,163,167,169,173,175,179,181,185,187,191,193,197,199,203,205,209,211,215,217,221,223,227,229,233,235,239,241,245,247,251,253,257,259,263,265,269,271,275,277,281,283,287,289,293,295,299,301]
...
Рейтинг: 0 / 0
jdk17
    #40108458
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

я не могу показать код из-за NDA, но там эпичные вещи. Эпичные вещи долго описывать. Приведу такой пример (псевдокод):

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
public class SomeWizard {

   private final SomeModel model = new SomeModel();
   private ISelection selection;

   public void init(ISelection selection) {
       this.selection = selection;
       String name = getName()
       model.setName(name);
   }

   private String getName() {
       return selection.getFirstObject().getName();
   }

}



Ни selection, ни getName() нигде больше не используются. getName() однозначно не потребуется переопределять в дочерних классах, да, и дочерних классов тоже быть не должно.

Зачем это поле? Зачем этот метод? Если так уж хочется сделать метод, то почему бы не передавать туда selection как аргумент? Ну, тут ещё ладно, глядя на этот код можно понять о чём он. Но когда таких полей и методов десятки, то вообще ничего не понять. Для начала что-нибудь такое (поля/методы желательно перемешать, чтобы было непонятно что в какой очередности вызывается, где и зачем используется):

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
public class SomeWizard {

   private Object firstObj;
   private final SomeModel model = new SomeModel();
   private ISelection selection;

   private void getName() {
       name = firstObj.getName();
   }

   private void updateObj() {
       firstObj = selection.getFirstObject();
   }

   public void init(ISelection selection) {
       this.selection = selection;
       updateObj();
       setName();
       model.setName(name);
   }

}



Сделать ещё несколько таких классов, чтобы они вызывали методы друг у друга. Ну, и сами методы, даже если в них есть очевидно повторно используемые вещи ни в коем случае нельзя этот повторяющийся код выносить в сервисные классы, нужно его обязательно дублировать или засирать этим кодом базовые классы, чтобы в них всё было в куче. И если тебе нужен этот код, то выбирай: либо наследуйся от этого безумного класса, либо дублируй код.
...
Рейтинг: 0 / 0
jdk17
    #40108462
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
в Haskell например все списки изначально декларированы как ленивые и stream api - органичен
Да! А в лиспе ленивость добавляется макросами, если нужна.
...
Рейтинг: 0 / 0
jdk17
    #40108463
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb

Код: java
1.
2.
3.
   private String getName() {
       return selection.getFirstObject().getName();
   }



Тут есть два варианта. Раньше этот метод был публичным. Потом его скрыли.

Второй вариант - это плод неудачного рефакторинга. Раньше в методе было больше смысла.
...
Рейтинг: 0 / 0
jdk17
    #40108471
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

нет, это код написанный с нуля (точнее это псевдокод по мотивам реального кода) и единственный смысл этого метода это вычислить какое-то значение, которое дальше используется в init(). У меня бомбит от передачи данных между методами через поля. И я кажется понял почему! Потому что это фактически то же самое, что в процедурных языках использовать глобальные переменные. На мой взгляд, они должны добавляться только при явной необходимости, если без них никак не обойтись, для хранения состояния, а не для передачи данных.
...
Рейтинг: 0 / 0
jdk17
    #40108490
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb

3) Построение кода из небольших самостоятельных блоков (микро-DSL, микрофреймвоков, внутренних API). Люди, которые ни на чём кроме Java не писали, либо впадают в ступор, когда чего-то нет в стандартной библиотеке, либо пишут какой-то лапшакод

Тут есть определенная опасность. Микро DSL понятны только создателю. На согласование
новых ключевых слов микро-языка с командой нужно потратить огромное количество усилий человеко-часов
чтобы под давлением вашего авторитета или под убеждением правильности и необходимости ваш DSL
был принят сообществом (командой).

Я был свидетелем когда кастомные DSL поверх yaml или groovy проваливались на первом-же код-ревью
или на митинге. Обычно команда голосует очень консервативно. Все - не против фреймворка и библиотеки
поверх Java но как только речь идёт о DSL - очень сильно напрягаются.

Короче мы переписали DSL на Java. И в этом нет лично моей вины. Просто таков этот сложный процесс. Согласовать
идею со всеми.
...
Рейтинг: 0 / 0
jdk17
    #40108492
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb

3) В том числе сгенерили и такой класс . Да, в нём куча switch/case и if, но какая разница, сопровождать его всё равно не нужно. Если изменится модель, то все эти классы они просто перегенерят. Причём сейчас этот класс можно сгенерить с паттерн-мэтчингом вместо if. Достаточно чуток изменить шаблон кода и нажать кнопку.

Есть техническое ограничение на саму JVM. Длина метода в оп-кодах может быть не более 64к.
Экспериментально я находил такие ANTLR грамматики которые просто порождали некомпилируемые
сорцы. Я уж не помню как это фиксили.
Но в данном примере если байткод будет компактнее вследствие замены if-else на switch-case то
я конечно буду голосовать за последний.

Это - чисто технический вопрос.
...
Рейтинг: 0 / 0
jdk17
    #40108497
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb
mayton,

нет, это код написанный с нуля (точнее это псевдокод по мотивам реального кода) и единственный смысл этого метода это вычислить какое-то значение, которое дальше используется в init(). У меня бомбит от передачи данных между методами через поля. И я кажется понял почему! Потому что это фактически то же самое, что в процедурных языках использовать глобальные переменные. На мой взгляд, они должны добавляться только при явной необходимости, если без них никак не обойтись, для хранения состояния, а не для передачи данных.
ты прав.
Твой пример требует рефакторинга с выбрасыванием лишних методов.
Причем если интерфейс selection не используется, то и он в классе не нужен.
По поводу полей, то классы через них имеют состояние.
Значит надо их использовать.
А как иначе.
...
Рейтинг: 0 / 0
jdk17
    #40108506
localhost8080
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ares_ekb
mayton,

я не могу показать код из-за NDA, но там эпичные вещи. Эпичные вещи долго описывать. Приведу такой пример (псевдокод):

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
public class SomeWizard {

   private final SomeModel model = new SomeModel();
   private ISelection selection;

   public void init(ISelection selection) {
       this.selection = selection;
       String name = getName()
       model.setName(name);
   }

   private String getName() {
       return selection.getFirstObject().getName();
   }

}




Это просто дурно написаный код и все
...
Рейтинг: 0 / 0
jdk17
    #40108507
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

на мой взгляд, в лиспе нет особой разницы между DSL и фреймвоками. В Java иногда напрягает, что нельзя переопределять операторы как в C++ или что нет расширений классов как в C# или что для Stream API нет синтаксиса как у LINQ, и приходится писать больше кода. Но, с другой стороны, какая разница какой синтаксис используется. Наверное x + y выглядит лучше, чем x.add(y), это может быть важно для пользователей, если они сами пишут какие-нибудь скрипты или спецификации. А для разработчиков в принципе не так важно.

Хотя, я конечно зря смешиваю эти понятия. DSL без специфического синтаксиса это уже не DSL. Мне лично удавалось продвигать только стандартизированные DSL типа OCL, QVTo, MOF M2T. И то, с трудом, люди скорее готовы использовать JavaScript или Lua. Потому что для JavaScript много вакансий и специалистов. Один фиг, что из этих специалистов ровно ноль человек писали какие-нибудь преобразования моделей на JavaScript, и опыт во фронте или в бекенде им никак не поможет. А специальный DSL для преобразования моделей осваивается за день и позволяет делать всё гораздо проще, не позволяет писать лапшакод.

Но всё равно людей пугают DSL, они думают, что нужно потратить месяцы на их освоение, и что эти знания будут лежать мертвым грузом и никогда не понадобятся ни на какой другой работе, или что они не смогут найти специалистов по этому DSL. Я как-то проще к этому отношусь, может быть зря.
...
Рейтинг: 0 / 0
jdk17
    #40108509
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb

В Java иногда напрягает, что нельзя переопределять операторы как в C++ или что нет расширений классов как в C# или что для Stream API нет синтаксиса как у LINQ, и приходится писать больше кода. Но, с другой стороны, какая разница какой синтаксис используется. Наверное x + y выглядит лучше, чем x.add(y), это может быть важно для пользователей, если они сами пишут какие-нибудь скрипты или спецификации. А для разработчиков в принципе не так важно.

Ты можешь использовать Scala.
...
Рейтинг: 0 / 0
jdk17
    #40108510
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb,
А что ты имеешь против Lua?
У шарпистов на нем активно пишут не программисты аналитики.
...
Рейтинг: 0 / 0
jdk17
    #40108512
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb

Хотя, я конечно зря смешиваю эти понятия. DSL без специфического синтаксиса это уже не DSL. Мне лично удавалось продвигать только стандартизированные DSL типа OCL, QVTo, MOF M2T. И то, с трудом, люди скорее готовы использовать JavaScript или Lua.

А можешь привести пример какого-нибудь DSL который здесь произведет вау-эффект?
Здесь - люди сидят тоже не простые. Энтерпрайз повидали и всяко. И вот допустим есть у нас такая типичная энтити.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
@Data
@Entity
@Table("students")
public class Student {

    @Id
    private String id;
    private String name;
    private String email;
    private LocalDateTime lastUpdateTime;

}


И она обвешана аннотациями ORM/Lombok и может даже Jaskson для биндинга и сериализаций.
Вот допустим у тебя в Lisp возникает та-же задача. Процессить сущности в базе в бизнес логике и сериализировать.

Вот какие ты сделаешь функции или макросы или может еще какую-то черную магию?
...
Рейтинг: 0 / 0
jdk17
    #40108514
localhost8080
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
Ares_ekb

Хотя, я конечно зря смешиваю эти понятия. DSL без специфического синтаксиса это уже не DSL. Мне лично удавалось продвигать только стандартизированные DSL типа OCL, QVTo, MOF M2T. И то, с трудом, люди скорее готовы использовать JavaScript или Lua.

А можешь привести пример какого-нибудь DSL который здесь произведет вау-эффект?
Здесь - люди сидят тоже не простые. Энтерпрайз повидали и всяко. И вот допустим есть у нас такая типичная энтити.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
@Data
@Entity
@Table("students")
public class Student {

    @Id
    private String id;
    private String name;
    private String email;
    private LocalDateTime lastUpdateTime;

}


И она обвешана аннотациями ORM/Lombok и может даже Jaskson для биндинга и сериализаций.
Вот допустим у тебя в Lisp возникает та-же задача. Процессить сущности в базе в бизнес логике и сериализировать.

Вот какие ты сделаешь функции или макросы или может еще какую-то черную магию?


в реальности хибер зло - причем зло не потому что он плохой- порог входа очень высок

что сейчас знает типичный прогер- ну отношения там один ко многим ,многие ко многим ,каскадные оперции ,если повезет то еще и состояние сущностей)на этом все

но фактически хибернейт это государство в государстве - и чтобы правильно применить этот инструмент нужны экспертные знания - иначе вы проиграли - поэтому я всегда говорю - если тут нет экспертов по хибер - используйте жук
...
Рейтинг: 0 / 0
jdk17
    #40108515
localhost8080
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Одна из самых очевидных ошибок при разработке на хибере- ты хочешь взять что то из таблицы но не все ,при этом конечно все хотят убрать самый бесполезный механизм хибера грязная проверка,который мало того что в память гадит,так еще и ресурсы процессорные кушает
как этого избежать ? использовать проекции- кто то тут умеет их ?)сомневаюсь- но при этом все продолжают ругать хибер
...
Рейтинг: 0 / 0
jdk17
    #40108540
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
localhost8080,

а какие преимущества у хибера перед простым jdbc?
...
Рейтинг: 0 / 0
jdk17
    #40108545
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
))
те же что и при склейке строк
print("<""HTML" + ">".....
...
Рейтинг: 0 / 0
jdk17
    #40108546
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
localhost8080,
давай не начинать про нужность хибера.
Его надо использовать как в дельфи. Там нужно сложно - есть API Win и ASM. Нужно просто для студента - есть vcl.
localhost8080
Одна из самых очевидных ошибок при разработке на хибере- ты хочешь взять что то из таблицы но не все

а не надо этого хотеть. В прошлый раз ты показывал проект сущности из 80 полей. В этом причина.
Не надо заводить шарманку про нужность хибера)
...
Рейтинг: 0 / 0
jdk17
    #40108550
localhost8080
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадя
localhost8080,

а какие преимущества у хибера перед простым jdbc?

удобное апи для работы с графами объектов,встроеный мапинг кортежей,сокращение бойлер плейт кода,читаемость кода и удобство поддержки в дальнейшем

Рассмотрим простой пример - у вас была таблица A с некими колонками a.1 a.2 a.3
у вас описаны запросы
написаны маперы этого кортежа в какой то бизнес объект

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

кажется пустяком,но это когда ты вне спринтов живешь и никому ничего не обязан
...
Рейтинг: 0 / 0
jdk17
    #40108551
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
localhost8080
что произойдет если вы добавите колонку a.4 в эту таблицу,правильно - придется переписывать руками очень много кода
в случае с хибернейт достаточно будет лишь добавить это поле с сущность

кажется пустяком,но это когда ты вне спринтов живешь и никому ничего не обязан


Ты пугаешь ежа голой жопой. У Вади если кнопку нужно добавить на страницу нужно 100500 html перебить в 100500 процедурах, а ты тут про какие-то колонки байки рассказываешь
...
Рейтинг: 0 / 0
jdk17
    #40108552
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов,

авторТы пугаешь ежа голой жопой. У Вади если кнопку нужно добавить на страницу нужно 100500 html перебить в 100500 процедурах, а ты тут про какие-то колонки байки рассказываешьесли ты не понимаешь что икак устроено - не надо фантазировать и говорить чепуху. и смешивать добавление полей и кнопок.

простое добавление поля в таблицу ведет изменение логики и хибер автоматом не позволит это сделать,, особенна на фронте
...
Рейтинг: 0 / 0
jdk17
    #40108553
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
localhost8080
Рассмотрим простой пример - у вас была таблица A с некими колонками a.1 a.2 a.3
у вас описаны запросы
написаны маперы этого кортежа в какой то бизнес объект

что произойдет если вы добавите колонку a.4 в эту таблицу,правильно - придется переписывать руками очень много кода
И вот тут, лично у меня, возникает когнитивный диссонанс ...
Код: sql
1.
select поле1, поле2, поле3 from таблица

Что произойдёт, если в таблице есть (появилось) поле4? Правильно. Ничего не случится. Это поле отсутствует в наборе данных.
Научитесь, в общем, правильно начинать рассказ о преимуществах ORM вообще и Hibernate - в частности.
...
Рейтинг: 0 / 0
jdk17
    #40108555
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
localhost8080
вадя
localhost8080,

а какие преимущества у хибера перед простым jdbc?

удобное апи для работы с графами объектов,встроеный мапинг кортежей,сокращение бойлер плейт кода,читаемость кода и удобство поддержки в дальнейшем

Рассмотрим простой пример - у вас была таблица A с некими колонками a.1 a.2 a.3
у вас описаны запросы
написаны маперы этого кортежа в какой то бизнес объект

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

кажется пустяком,но это когда ты вне спринтов живешь и никому ничего не обязан
хороший вброс. Купил попкорн, надел маску.
...
Рейтинг: 0 / 0
jdk17
    #40108563
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
. Купил попкорн, надел маску.
ты попкорном будешь бросаться?
...
Рейтинг: 0 / 0
jdk17
    #40108564
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
угу. Смотри как localhost8080 вырос из джунов. Стал серьезным, политкорректным и если делает вброс то только инженерным языком.
Молодец.
...
Рейтинг: 0 / 0
jdk17
    #40108567
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton


Вообще главная цель - обеспечить читаемость кода другим человеком. А уж компиллятор как нибудь разберется.
Это кстати сказал Мартин Фаулер. Код пишется человеком для людей.

+100500!!!
...
Рейтинг: 0 / 0
jdk17
    #40108587
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
localhost8080,

а какие преимущества у хибера перед простым jdbc?

Я-бы по другому спросил. Есть ли жизнь по ту сторону Spring?

Тоесть можем ли мы сегодня (в наше время) рассматривать вообще возможность применения Hibernate без Spring?
Я когда-то писал и использовал. Но что-то мне кажется что сегодня я по памяти даже не напишу привед-мир на хибере.
По крайней мере инициализация всех этих менеджеров представляется мне задачей непростой.

Я к чему это. А. К бритве Оккама. Мы говорим Hibernate - а подразумеваем Spring-Hibernate.

А что у нас Хибернейт вообще не существует без спринга?
...
Рейтинг: 0 / 0
jdk17
    #40108674
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
А можешь привести пример какого-нибудь DSL который здесь произведет вау-эффект?
Здесь - люди сидят тоже не простые. Энтерпрайз повидали и всяко. И вот допустим есть у нас такая типичная энтити.
Вряд ли получится вау-эффект... У меня была такая задача (я её описывал уже немного выше).

Нужно было сделать редактор моделей данных, который поддерживает разные нотации. В нём можно рисовать ER-модель, UML диаграммы классов, Anchor-модели и т.п. Чтобы всё это работало было нужно следующее:

1) Entity-классы с JPA-аннотациями для хранения моделей
2) Java-классы для работы с моделями (реализуют интерфейс org.eclipse.emf.ecore.EObject), они по структуре похожи на Entity-классы, но лучше их не смешивать
3) Мапинги 1->2
4) Мапинги 2->1
5) DTO-классы с Jackson-аннотациями. У этих классов только вертикальные ссылки на дочерние DTO классы оставлены как ссылки. А горизонтальные ссылки заменены на поля, хранящие идентификаторы объектов, на которые ссылаемся. Это нужно потому что JSON-документ - это дерево, а не граф и (де)сериализация существенно упрощается, если горизонтальных ссылок нет. Конечно можно попробовать всё это объединить в одних классах, но получится жесть, проще всё это разделять
6) Мапинги 5->2
7) Мапинги 2->5
8) JavaScript-классы для самого редактора диаграмм, которые умеют (де)сериализироваться в JSON

Сами схемы данных описывались на языке Xcore - это гибрид Ecore и Xtend. Вот, пример, xcore-файла из другого проекта. Там ничего особенного, этот язык позволяет описывать классы, интерфейсы, наследование, атрибуты, ссылки, операции. Конечно же никакие JPA-аннотации, Lombok аннотации и т.п. в этих Xcore-файлах не нужны, они добавляются кодогенераторами в зависимости от того какая именно это ссылка (один-ко-многим, многие-ко-многим) и т.п. Автоматически добавляются всякие аннотации типа @JsonSubTypes и т.д.

У меня было 50 Кб этих xcore-файлов. 100 Кб шаблонов на языке Xtend для генерации кода. И из всего этого генерилось 3,5 Мб исходников (пункты 1-8).

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

Ещё в исходную модель или в код на DSL можно добавлять какие-нибудь дополнительные данные. Типа названия и описания этой сущности на русском и других языках. В единственном и множественном числе, в разных падежах и т.д. Потом из этого можно генерить файлы локализации, документацию. В общем всё, что касается схемы данных описано в одном месте, а не размазано по куче файлов.

Ещё одна штука, которую я делал в этом проекте - это описывал грамматику разных языков, например, SQL на языке Xtext (это тоже своеобразный DSL типа языка описания грамматик в ANTLR), и потом генерил из неё JavaScript-код для парсинга, сериализации и автодополнения SQL-выражений на клиенте.


В Лиспе я думаю, что подход был бы примерно такой же. Я описал бы схему данных без всяких аннотаций и т.п. Определил бы какой-нибудь макрос типа define-domain-class, который получал бы на вход название класса, перечень атрибутов с типами, ссылки на другие классы с указанием множественности и обязательности, может быть операции какие-нибудь. А внутри этого макроса уже спрятал бы всякие вещи для сохранения этих данных в базу, сериализации в JSON и т.п. Что-нибудь типа:
Код: sql
1.
2.
3.
4.
(define-domain-class person
  (name string)
  (birth-date date)
  (pets pet 0 *))
...
Рейтинг: 0 / 0
jdk17
    #40108760
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
вадя
localhost8080,

а какие преимущества у хибера перед простым jdbc?

Я-бы по другому спросил. Есть ли жизнь по ту сторону Spring?

Тоесть можем ли мы сегодня (в наше время) рассматривать вообще возможность применения Hibernate без Spring?
Я когда-то писал и использовал. Но что-то мне кажется что сегодня я по памяти даже не напишу привед-мир на хибере.
По крайней мере инициализация всех этих менеджеров представляется мне задачей непростой.

Я к чему это. А. К бритве Оккама. Мы говорим Hibernate - а подразумеваем Spring-Hibernate.

А что у нас Хибернейт вообще не существует без спринга?


Зачем?!
Hibernate это «чудище обло, озорно, огромно, стозевно и лаяй».
Spring-data-jpa хоть как то прикрывает весь этот хтонический ужас, от не окрепших умов.
:-)
...
Рейтинг: 0 / 0
jdk17
    #40108761
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кажется spring-data уже не требует hibernate.
...
Рейтинг: 0 / 0
jdk17
    #40108762
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кончайте вы. Есть JPA спецификация. Хибер ее реализует. А спринг склеивает. А бут автоконфигурирует.
...
Рейтинг: 0 / 0
jdk17
    #40108767
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Кончайте вы. Есть JPA спецификация. Хибер ее реализует. А спринг склеивает. А бут автоконфигурирует.

Он реализует "только" JPA или еще что-то?

P.S. Чудище...
...
Рейтинг: 0 / 0
jdk17
    #40108772
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Конечно реализует как умеет.
Как все субд реализуют sql 92 года
...
Рейтинг: 0 / 0
jdk17
    #40108840
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я вобщем-то спрашивал диаметрально другое...
...
Рейтинг: 0 / 0
jdk17
    #40108843
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Киллер-фича gradle - это параллельная сборка несколькими процессами ОС и поддержка их
в пуле уже запущеных процессов. Если этот функционал перенести в maven - то тогда острая
необходимость в gradle - отпадет.

Сам себя комментирую.

Код: java
1.
$ mvn clean package -nsu -DskipTests -T 4



Это конечно не gradle, но субъективно собирает быстрее. 4 потока компилляции. Ключик nsu запрещает
апдейт снапшотов (для медленных корпоративных сетей это может быть утомительно).

Потоки можно подрегулировать каждому по вкусу и по железу.
...
Рейтинг: 0 / 0
jdk17
    #40108857
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Кажется spring-data уже не требует hibernate.


Да spring-data-jdbc :-)
...
Рейтинг: 0 / 0
jdk17
    #40108867
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну тогда можно выпить за упокой.
...
Рейтинг: 0 / 0
jdk17
    #40116267
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
jdk17
    #40118826
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YouTube Video
...
Рейтинг: 0 / 0
jdk17
    #40118849
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

слушать его просто невозможно......
...
Рейтинг: 0 / 0
jdk17
    #40118879
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вчера только до половины дослушал. Не знал что Security Manager поставлен на Deprecated.
...
Рейтинг: 0 / 0
jdk17
    #40118895
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Вчера только до половины дослушал. Не знал что Security Manager поставлен на Deprecated.


spotbug gradle plugin жалуется на SecurityManager deprecated, если нужен gradle 7.2 чтобы jdk17 завести.
...
Рейтинг: 0 / 0
jdk17
    #40118964
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Не знал что Security Manager поставлен на Deprecated.
JEP 411
...
Рейтинг: 0 / 0
jdk17
    #40119101
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Жаль что SecurityManager - нудный в конфигурациях. И там неудобно разрешить всё и запретить к примеру ходить в веб.
Там - модель разрешений больше похожа на Оракловую. И пока по логам SM не разрешишь явно все Runtime разрешения
и всякий прочий хлам - приложение нормально не работает. А так вобщем - и уязвимость Log4j2 просто не работала-бы.
Можно конечно запускать приложения в докерах но для кого-то это архитектурные шаги. А так просто опцию
командной строки добавил и всё. И не на один проект а на все сразу. А ручная фиксация этого 0-day - это
пойди обойди все конфигурации всех проектов и подобавляй настройку для запрета интеполяций msg.
...
Рейтинг: 0 / 0
240 сообщений из 240, показаны все 10 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / jdk17
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]