
Vladimir
20.04.2017
18:35:19
зашейдить в libraryDependencies?
т.е. пометить provided

Iaroslav
20.04.2017
18:37:56
через dependencyTree найти кто его тащит и сделать .exclude

Sergey
20.04.2017
18:43:49
мда. приется ловить как то в dep Tree :\ видимо каждому это рано или поздно приходится делать

Google

Lev
20.04.2017
18:46:41

Sergey
20.04.2017
18:49:09
помогло ?

Mr.White
20.04.2017
22:04:00
Привет,
Объясните пожалуйста, ну или в спеку ткните, в чем причина компиляции выражения скалы в следующий JVM байткод:
Scala: val numNames = Array("zero", "one", "two")
байткод:
...
51: aastore
52: checkcast #85 // class "[Ljava/lang/Object;"
55: checkcast #86 // class "[Ljava/lang/String;"
58: putfield #61 // Field numNames:[Ljava/lang/String;
Если class открыть Java Decompiler то увидим это:
this.numNames = ((String[])new String[] { "zero", "one", "two" });
Т.е. зачем вот эти касты?
Я из .NET мирка, слышал что JVM имеет очень богатый набор оптимизаций и тут может одна из них и будет, но назначение мне так и не понятно.

Kirill
21.04.2017
04:37:12
так скаловский Array же дженерик, вот он и кастит, как и для любого другого дженерика

Aleksey
21.04.2017
04:37:24
Скала создает массивы неэффективно. Это не равнозначные выражения. Если я ничего не путаю, сначала сдается массив который оборачивается во wrappedarray, потом поля из него переписываются в новый массив поэлементно. Касты из за тайп эрежа.

Kirill
21.04.2017
04:46:16

Aleksey
21.04.2017
04:48:00
Я тут подумал еще, почему бы не отдавать сразу вроппедаррай? Наверно я все же что-то путаю.

Kirill
21.04.2017
04:50:36

Mr.White
21.04.2017
04:54:34
Спасибо большое, совсем забыл про type erasure в JVM, теперь понятно почему и зачем
Вот эти type erasure и обилие invokevirtual после CLR уж очень смущают
Я конечно понимаю, что последние будут заменены на invokespecial, но всё равно не по себе
Изучение Scala видимо будет очень увлекательным

Google

Oleg
21.04.2017
05:18:40

Mikhail
21.04.2017
05:20:42

Oleg
21.04.2017
05:21:20
Почему-то создатели java посчитали, что здорово бы сделать массив ковариантным, а если после успешного апкаста ты попытаешься положить туда ссылку на супертайп, у тебя будет рантайм еррор
В скала массив вернули в инвариантную форму
Видимо, в связи с этим обвешали кучей проверок на каждое присвоение

Daniel
21.04.2017
05:22:29
создатели java осознали проблему давно, но как обычно ничего не могут с этим сделать из-за обратной совместимости
из этой серии был еще доклад Шипилева о String compaction грядущем, где тоже пришлось пойти на жертвы ради совместимости

Oleg
21.04.2017
05:36:52
ну , кстати, в дотнете скопировали и array covariance

Kirill
21.04.2017
05:37:08

Oleg
21.04.2017
05:37:11
так что здесь не должно быть недопонимания

Aleksey
21.04.2017
05:39:36
Ребят. Филосовский вопрос за жизнь. Объясните дураку, почему логи это все еще длинные списки строк? Почему их постобработкой превращают во что-то удобоваримое вместо того что бы сразу делать их в виде деревьев, с выносом метаданных из сообщения?

Wystan
21.04.2017
05:41:22
Так логатеш парсит твои логи в кибану и вытаскивает заданные параметра

Юрий
21.04.2017
05:41:59

Oleg
21.04.2017
05:42:21

Mikhail
21.04.2017
05:42:42

Oleg
21.04.2017
05:42:44
Пока что у нас тут юникс головного мозга

Daniel
21.04.2017
05:42:57

Aleksey
21.04.2017
05:43:09

Oleg
21.04.2017
05:43:24

Denis
21.04.2017
05:43:43

Google

Daniel
21.04.2017
05:43:47
логи часто являются узким местом и режут их количество

Wystan
21.04.2017
05:43:58
Ну ок, посмотрю как вы без грепа там будете по своим деревьям лазать

Mikhail
21.04.2017
05:43:59
Мне кажется, ровно наоборот
именно! Структурированное хранение - не означает жесткую структуру хранения. Но некоторые не понимают этого)

Denis
21.04.2017
05:44:04
И в кибане можно было делать волшебные выборки

Mikhail
21.04.2017
05:44:35

Aleksey
21.04.2017
05:44:41

Юрий
21.04.2017
05:44:43
а еще можно сразу отправлять логи в какой-то сервис, если есть соотвествующий апендер. Я видел для всяких агрегаторов такие апендеры

Mikhail
21.04.2017
05:44:51
Которые и не снились скулю)

Denis
21.04.2017
05:45:07

Daniel
21.04.2017
05:45:50
а еще вам спасибо в ETL отделе скажут за очередной формат, который потребует постобработки на их стороне

Oleg
21.04.2017
05:46:00

Евгений
21.04.2017
05:46:50
пробил дно

Aleksey
21.04.2017
05:46:51

Denis
21.04.2017
05:46:53
Ну если один сервис запущен то и греп ок

Mikhail
21.04.2017
05:46:54
Причем тут это? Я про логи
и я про логи. выборки в кибане используют те же принцицы, что и скуль - но они слишком примитивны (даже по сравнению со скулем). а некоторые вещи и вовсе не возможно провернуть

Denis
21.04.2017
05:47:10
Ну ок

Lev
21.04.2017
05:48:36

Wystan
21.04.2017
05:49:00
греп??? на дворе же логстэшспланкигрейлог пробил
У нас в кибане зранятся данные за последние пару месяцев, а вот зипованные логи с начала времен. Так то да все в кибане смотрится, но вопрос почему постобработка. Я не очень понял, что структурирование на лету даст, логи ухудшают перформанс в в ажных местах, а если там еще структурировать. И ни одного плюса не вижу

Mikhail
21.04.2017
05:49:04

Mr.White
21.04.2017
05:49:05

Google

Mikhail
21.04.2017
05:49:35

Mr.White
21.04.2017
05:49:59
вопрос только потребностей
если часть логов имеет жесткую структуру и важны для кого-то, например для аналитики, то почему бы и нет. Иногда лучше так, чем ковыряться с другими вариантами хранения и обработки.

Mikhail
21.04.2017
05:52:08
мне не нужны реляционки. как только я пишу log (Item0(name = "dsada", dd=5, gg="dqweqweq", wewe=now()), log(Item1(name="dsada", person="eqweq", id=4343343)) - я их спокойно могу в один стрим сохранить и без всяких проблем построить любой индекс (даже тот который не предусмотрен хранилищем) по подмножеству и тюнить их как угодно - никакая постобработка не нужна.

Lev
21.04.2017
05:52:43
Вопрос защитникам текстовых логов. Как у вас дела с логированием бинарных данных?

Mikhail
21.04.2017
05:55:13

Aleksey
21.04.2017
05:55:21

Admin
ERROR: S client not available

Mikhail
21.04.2017
05:56:56
И кейсклассов на 50 полей.
кейс класс на 50 полей конечно говно. но даже при таком варианте это гораздо лучше чем "field0=${field0}, ..... fieldN=${fieldN}". ))

Aleksey
21.04.2017
05:57:31

Mikhail
21.04.2017
06:00:00
Обоснуй, почему говно.
Я не отрицаю, что может быть какая-то примитивная структура у которой вот есть прям зафиксированный в бумажном госте список характеристик - которые совершенно бесполезно дробить на структуры. Но в абсолютном большинстве гораздо грамотнее использовать декомпозицию полей и композицию сущностей. Item ( field0 = Item1 (несколько полей), field1 = Item2 ( field 0 = Item 3 ))

Mr.White
21.04.2017
06:02:43

Mikhail
21.04.2017
06:03:47
чем больше полей в одном контексте - тем больше шанс совершить ошибку. начиная с орфографических ошибок ( компиляция не спасает от чудаков которые любят написать ide(пропущена буква)tificator и потом везде использовать автокомплит не обращая внимания. продолжая тем, что проще позабыть а все ли ты там указал или еще что надо

Mr.White
21.04.2017
06:04:18
Обычно делали как: описываются форматы логов, которые нужны, к ним лепится "тег" по тегу logstash смотрит что за тег и под него использует нужный парсер и индекс, т.к. логстеш на отдельных серверах влияние на производительность небольшое

Mikhail
21.04.2017
06:04:26

Lev
21.04.2017
06:05:17

Mikhail
21.04.2017
06:06:16

Mr.White
21.04.2017
06:07:13

Lev
21.04.2017
06:08:38

Google

Lev
21.04.2017
06:11:44
Плоха сама идея писать что-то в одном месте, а в другом месте разбирать это по спекам. Мало того, что добавляется ещё одна система для сопровождения, так ещё есть риск пропустить что-то важное в промежутке между обновлениями формата логов и парсеров на принимающей стороне
Конечно же, это компенсируется написанием тестов для логов ? Хоть где-то фри монады пригодятся


Daniel
21.04.2017
06:21:56
Плоха сама идея писать что-то в одном месте, а в другом месте разбирать это по спекам. Мало того, что добавляется ещё одна система для сопровождения, так ещё есть риск пропустить что-то важное в промежутке между обновлениями формата логов и парсеров на принимающей стороне
в большой конторе с кучей разных потребителей ты так или иначе вляпаешься (или не ты но хранилище)
например, у нас бизнес аналитики любят юзать сас (ладно, не умеют ничего прочего, а уволить сразу всех нельзя)
и толку что я логировал ассоциативные массивы, если их ентерпрайзный комбайн не умеет с ними работать
etl сидит и разбирает эту структуру и добавляет (по запросу!) новые поля при необходимости, чтобы сранный сас с этим мог работать
я не противник бинарного хранения и тем более структурированного, но в мире где еще живы 300 диалектов кобола, нереально (повсеместно) перейти на что-то иное чем тупо строки
черт, глаз прям задергался, как вспомнил

Oleg
21.04.2017
06:24:09

Lev
21.04.2017
06:25:21

Oleg
21.04.2017
06:25:42
если Avro схему обогатить текстовыми (а то и html) шаблонами для отображения получится идеальный протокол для логов

Daniel
21.04.2017
06:26:16
аналитик работает с массивом данных, ему пофиг на отдельные записи
конкретно в том месте не авро, но очень похожий самопал
проблема то не там
проблема в том, что это никак не уменьшило работы другому отделу

Oleg
21.04.2017
06:28:15

Daniel
21.04.2017
06:28:28
и пока я вижу только один вариант, отхерачить толстой книгой по питону аналитиков, заставить выучить и отправить работать в хадупе вместо саса
нельзя вот так автоматом добавить еще одну колонку в сас, исходя из входных данных

Oleg
21.04.2017
06:30:17

Daniel
21.04.2017
06:31:23
разговор о логах был в контексте необходимой постобработки в другой системе

Nick
21.04.2017
06:32:19
Ох нифига у вас тут темы
Бинарные данные логируете)

Lev
21.04.2017
06:33:05

Nick
21.04.2017
06:33:36
Причём тут хадуп то вообще?

Oleg
21.04.2017
06:33:45