@scala_ru

Страница 611 из 1499
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
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
Скала создает массивы неэффективно. Это не равнозначные выражения. Если я ничего не путаю, сначала сдается массив который оборачивается во wrappedarray, потом поля из него переписываются в новый массив поэлементно. Касты из за тайп эрежа.
ага, а еще скала-компилятор думает что слишком умен, и когда ты пишешь обычный ArrayList, и потом делаешь в него add несколько раз, скала-компилятор это "оптимизирует" в Arrays.asList, думая что он самый хитрый

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

Kirill
21.04.2017
04:50:36
Я тут подумал еще, почему бы не отдавать сразу вроппедаррай? Наверно я все же что-то путаю.
Это не как с JavaConverters, когда он создает невидимую обертку, которую из кода не видно, а в рантайме очень даже? Это мешает при всяких сериализациях-десериализациях

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
Спасибо большое, совсем забыл про type erasure в JVM, теперь понятно почему и зачем
Тут ещё интересно, что как раз массив - это тот тип в jvm, который не совсем стирает типы

Mikhail
21.04.2017
05:20:42
так скаловский Array же дженерик, вот он и кастит, как и для любого другого дженерика
Это же не совсем так. Массивы примитивов не дженерики. Они хранят значения и знают что именно они хранят. Скала с ними ничего не делает без необходимости. Это все также плейн жвм массивы. В случае не примитива они хранят ссылки, но при этом массивы в жвм также единственные кто знает componentType в рантайме

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

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

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

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

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

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

Aleksey
21.04.2017
05:43:09
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
греп??? на дворе же логстэшспланкигрейлог пробил
Ну это кстати да. docker logs mycontainer | grep myrequestid. Это удобно

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

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

Denis
21.04.2017
05:47:10
Ну ок

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

Mikhail
21.04.2017
05:49:04
а еще вам спасибо в ETL отделе скажут за очередной формат, который потребует постобработки на их стороне
за структурированное хранение - именно, что скажут. потому что им не нужно будет делать постобработку вобще. при правильном подходе - это просто структурированные деревья примитивов и списков - и обращаться сразу к нужным полям - сказка. как раз таки строки и требуют постобработки

Mr.White
21.04.2017
05:49:05
и я про логи. выборки в кибане используют те же принцицы, что и скуль - но они слишком примитивны (даже по сравнению со скулем). а некоторые вещи и вовсе не возможно провернуть
ты логстэшем можешь в реляционную базу логи закидывать, вопрос только в том как ты будешь их структурировать для него. в elasticsearch можно подтюнить indeces, чтобы данные были в более подходящим формате для запросов, достаточно настроить темплейты

Google
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)) - я их спокойно могу в один стрим сохранить и без всяких проблем построить любой индекс (даже тот который не предусмотрен хранилищем) по подмножеству и тюнить их как угодно - никакая постобработка не нужна.

Mikhail
21.04.2017
05:55:13
если часть логов имеет жесткую структуру и важны для кого-то, например для аналитики, то почему бы и нет. Иногда лучше так, чем ковыряться с другими вариантами хранения и обработки.
когда ты используешь классы как сущности для логирования - ты получаешь ту же самую жесткую структуру в компайл тайм, при этом хранилище все также лишено всех традиционных минусов и при изменении сигнатуры сущности сторадж сам добавит нужную информацию в таблицу схем сущностей и проставит нужные метки, где что используется

Admin
ERROR: S client not available

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

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

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

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

Mr.White
21.04.2017
06:07:13
Потом это повторяют 50 раз, рефакторят код и получают regex hell
как-то не вызывало проблем. Есть общие логи, есть с более специфичным форматом, все это направляется в elasticsearch

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

Конечно же, это компенсируется написанием тестов для логов ? Хоть где-то фри монады пригодятся

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

черт, глаз прям задергался, как вспомнил

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
и пока я вижу только один вариант, отхерачить толстой книгой по питону аналитиков, заставить выучить и отправить работать в хадупе вместо саса

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

нельзя вот так автоматом добавить еще одну колонку в сас, исходя из входных данных

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

Nick
21.04.2017
06:32:19
Ох нифига у вас тут темы

Бинарные данные логируете)

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

Oleg
21.04.2017
06:33:45
разговор о логах был в контексте необходимой постобработки в другой системе
да но это уже не пост-обработка, это уже использование постобработанных данных для выгрузки в третью систему. Конкретно о постобоаботке для экстракции в avro думать не нужно

Страница 611 из 1499