Yaroslav
19.02.2018
08:19:38
Mikhail
19.02.2018
08:26:22
Я себе с амазона как-то привозил наушники мониторные. Доставлял UPS, так там всё было упаковано в прочную коробку раза в 4 больше чем упаковка наушников и доверху забито какими-то мягкими хлопьями, так что ей в футбол можно было играть без вреда для содержимого. Доехало за две недели из штатов и курьер заранее звонил.
так что может конкретно тебе так не повезло
Nikita
19.02.2018
08:30:32
Есть где-нибудь статьи на предмет однозначности декомпиляции bytecode?
Google
Rikland
19.02.2018
08:40:37
Ivan
19.02.2018
11:23:07
Igorek
19.02.2018
12:00:09
привет жаваны. а кто-нибудь вкурсе о текущем состоянии Java-card оно вообще как нибудь живо? шевелится?
https://en.wikipedia.org/wiki/Java_Card
Egor
19.02.2018
12:01:02
guga
19.02.2018
12:01:17
Ivan
19.02.2018
12:07:58
Igorek
19.02.2018
12:17:00
https://www.infineon.com/ от этих ребят
Ivan
19.02.2018
12:18:07
Egor
19.02.2018
12:22:02
Мне кажется Вы очень зря так плохо думаете о команде которая делает kotlin std-lib.
Ну, да, возможно. Просто какие-то неприятные впечатления остались об использовании встроенных toMap(), toList(), я даже специально открыл сейчас тот самый код, который тогда писал, но оказалось, что там используются именно они в абсолютно адекватном виде. Ну, в общем, ввожу тут людей в заблуждение :)
Энивей, если речь идет о мутабельных коллекциях, в которые нужно добавить данные - я не вижу других путей, кроме как .peek() или .forEach()
Сергей
19.02.2018
12:29:10
не-а, все ж не резолвятся. Пробил в качестве значения константу sbt-nelyubin-sv работает, а %teamcity.build.triggeredBy.username% не стартует.
Google
Сергей
19.02.2018
12:29:13
но мне нужно динамическое значение, а не константа
если посмотреть на список параметров, которые фиксируются при запуске билда (когда запускал вручную без AgentRequirements) то там есть оба параметра с одинаковым значением
@fundamentalparticle прокомментируешь?
Anton
19.02.2018
12:34:10
%teamcity.build.triggeredBy.username% не подменяется в каких то случаях?
Сергей
19.02.2018
12:34:38
Всем привет!
Вопрос:
в TeamCity можно настроить в конфигурации сборки Agent Requirements. Тогда эта конфигурация сборки будет запускаться только на совместимых агентах.
А есть ли возможность настроить так, чтобы одна и та же сборка запускалась на разных агентах в зависимости от того кто залогинен в TeamCity?
Возможно как-то с помощью параметра teamcity.build.triggeredBy.username ?
взлетит если например добавить в Agent Requirements / Explicit Requirements такое ?:
вопрос стал понятнее или еще другими словами описать?
есть одна конфигурация сборки. мне надо чтобы если на кнопку Run нажал Иванов, то сборка запустиласть на агенте с именем jvm ivanov, а если нажал Петров, то на агенте с именем jvm = petrov
возможно я изобретаю велосипед и это можно как-то сделать элегантнее
Anton
19.02.2018
12:38:40
вопрос понятен
а сборка запускается только вручную чтоль?
Сергей
19.02.2018
12:39:11
да, эта сборка предназначена для запуска только вручную
Anton
19.02.2018
12:40:11
говорят, так сделать нельзя.
Сергей
19.02.2018
12:40:20
ок. принято
Anton
19.02.2018
12:40:47
@snelyubin мне лично самому интересно, а зачем это?
для какой то воспроизводимости?
Сергей
19.02.2018
12:43:54
есть некий multi-project, процесс сборки которого сильно не тривиален.
создал дерево конфигураций для управления процессом его сборки в TC.
предполагаю это решение предложить коллегам, чтобы меньше огребать проблем со сборкой проектов локально на dev машинах.
Google
Сергей
19.02.2018
12:44:04
все синхронизируется в git
и это очень удобно
новичок с нуля мог бы собрать весь этот зоопарк просто установив агента к себе на бланковую машину
отличие от обычного CI процесса, что это получаются такие managed workcopies
это в двух словах ?
Ivan
19.02.2018
12:54:26
Ну, да, возможно. Просто какие-то неприятные впечатления остались об использовании встроенных toMap(), toList(), я даже специально открыл сейчас тот самый код, который тогда писал, но оказалось, что там используются именно они в абсолютно адекватном виде. Ну, в общем, ввожу тут людей в заблуждение :)
Энивей, если речь идет о мутабельных коллекциях, в которые нужно добавить данные - я не вижу других путей, кроме как .peek() или .forEach()
peek -исключительно отладочная функция, использовать её имеет смысл только для распечатки того что в сриме происходит.
В мутабельные коллекции можно добавлять функцией addAll или toCollection для котлин есть прям такая функция https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/to-collection.html в джавке есть Collectors.toCollection() (или как-то он называется)
Anton
19.02.2018
13:15:36
это в двух словах ?
то есть чтобы пользователь через сервер запускал бы сборку у себя на компьютере?
Сергей
19.02.2018
13:16:33
да, чтобы она практически гарантированно собралась у него
новичку полчаса/час на сборку - и в бой ?
Anton
19.02.2018
13:17:28
Сергей
19.02.2018
13:17:45
да, сложная, много зависимостей в частях
даже не в первичной сборке проблема, а потом при разработке
где-то забыл какую-нить градл таску запустить в цепочке - и все, опять пересборка на полчаса/час
хочется стабильности и воспроизводимости
теоретически все это можно сделать в некоем общем градл скрипте
но с TC удобнее - визуально видно build chain
логи сборки хранятся и можно бросить ссылку коллеге на ошибку сборки
Денис
19.02.2018
13:19:48
Именно с точки зрения назначения инструментария.
Сергей
19.02.2018
13:20:16
статистика времени сборки - можно выявить узкие места в фазах сборки
Google
Сергей
19.02.2018
13:20:25
вобщем плюсов много
Alexander
19.02.2018
13:20:52
Можно вопрос по хибернейту задать?
В Oracle можно максимум 1000 параметров в in(...) использовать. Я, из-за этого, любые места с in(...) обязан обкладывать разбиением List-в. Может, это можно как-то автоматически делать? Средствами хибернейта..
Я пробовал нагуглить... нашел лишь этот кусок в коде хибернейта:
int inExprLimit = dialect.getInExpressionCountLimit();
if (inExprLimit > 0 && bindValues.size() > inExprLimit) {
log.tooManyInExpressions(dialect.getClass().getName(), inExprLimit, sourceParam.getName(), bindValues.size());
}
Печально как-то. Надеюсь, что я просто не туда смотрю. Кто как делает в таких случаях?
Anton
19.02.2018
13:22:17
Я просто представляю себя - придя на новый проект, читаю инструкции: "сначала установите себе агент ТС для сборки...".
Я бы сразу (╯°□°)╯︵ ┻━┻
Сергей
19.02.2018
13:24:28
можно написать gradle таски, которые под капотом будут запускать TC конфиги
зато управляемость сборкой в едином месте - это прекрасно
а то сейчас 200+ разрабов на проекте и кто в лес кто по дрова
плюсом это ж все не ограничивается dev стендами
test stage например
Anton
19.02.2018
13:26:52
зачем таскам запускать ТС конфиги? Может просто пускай таски делают всё локально. Просто чтоб локально отполированая сборка была. Когда нет отполированой сборки и получается дремучий лес из дров и палок с костылями
Сергей
19.02.2018
13:27:17
она отполирована в рамках одного проекта, но в целом это muilti-project
это тогда надо полировать новый единый градл скрипт
по мне легче отполировать TC
Денис
19.02.2018
13:28:15
Так сделать "мастер"-сборку, которая будет этот мультипроект собирать, как надо, да. Будь то градл или средства уровня ОС (типа шеллскрипта, не дай боже, конечно, но вдруг).
Сергей
19.02.2018
13:28:34
как и писал выше - можно и так
но я явно вижу плюшки в TC, которых точно нет в чистом gradle скрипте
Денис
19.02.2018
13:29:11
Это просто более разумное и корректное решение, чем костылять к этому ТС, судя по всему
Логгинг можно и в грэйдле настроить
Сергей
19.02.2018
13:29:44
логгинг - куда? в elastic ?
тоже вариант
Google
Сергей
19.02.2018
13:30:03
но в TC не только логгинг
Денис
19.02.2018
13:30:11
Ну это понятно
Сергей
19.02.2018
13:30:50
потом накручивать grafana к эластику - зачем если в TC это из коробки?
не вижу концептуальной разницы в сборке кончного артифакта и в сборке dev стенда
в первом случае - исходники это просто некий срез на момент X
во втором - текущий workcopy dir
Anton
19.02.2018
13:33:30
Разумно получить плюшки ТС поверх отполированой сборки без ТС. Это было бы идиально. И с точки зрения человека входящего в проект ("Checkout, open, build" - ничего дополнительно не настраивать чтоб), и с моей т.к. мне приятно что от ТС есть плюшки ?
Egor
19.02.2018
13:35:50
peek -исключительно отладочная функция, использовать её имеет смысл только для распечатки того что в сриме происходит.
В мутабельные коллекции можно добавлять функцией addAll или toCollection для котлин есть прям такая функция https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/to-collection.html в джавке есть Collectors.toCollection() (или как-то он называется)
Ну, это уже придирки. Есть много случаев, когда разработчику не нужно изменять тип стрима (читай, создавать новый), а только провести над элементами действия, т.е. map оказывается недостаточно выразителен и к тому же производит оверхед. Ну, простейший пример - стрим строк, во всех нужно заменить символ ';' на ','. peek по своему дизайну идеально подходит и к тому же вернет тот же стрим, а map добавит конвейерного мусора.
Oleksandr
19.02.2018
13:36:16
Egor
19.02.2018
13:36:39
Oleksandr
19.02.2018
13:36:51
Egor
19.02.2018
13:37:13
Я только что с jmh тестил, там трули оверхеды
Oleksandr
19.02.2018
13:38:05
ты что-то путаешь, это же core kotlin collections team, они не могли так накосячить
Egor
19.02.2018
13:38:37
а, да нет, я сейчас про джавовские стримы
В котлиновских peek-а вообще вроде нет
Ну, по-крайней мере в коллекциях точно