
Quet
27.12.2016
20:04:02

dypa
27.12.2016
20:07:05
у меня тут своя персональная боль - ребята на php с использованием DDD написали проектик 4 года назад... всё паттернами обмазано, даже в именах классов названия паттернов. не поддерживаемо. когда их встречаю им не стыдно до сих пор...

Quet
27.12.2016
20:09:19

Google

dypa
27.12.2016
20:10:36
ну были бы типы - они бы ещё и типами бы всё это обмазали. было бы 10500 типов на каждый чих, потому что ...

Quet
27.12.2016
20:14:59
ну менять что-то не так страшно становится


Denis
27.12.2016
20:33:56
Задачи всегда весело решать, например достижение консенсуса между серверами и шаринга состояния между сервисами в кластере в го решается через левое по, месяц, с ором и танцами. В Erlang based это почти из коробки, и весело и надежно, и задача не успела вскипятить мозги. Я доволен как разработчик, команда довольна, что выкатила новую фичу. PO доволен, что ничего не упало с первого притока юзеров.
Думаете зря назрела инициатива goodlang? Один ? Плюс еще что-то там было
Все прекрасно знают минусы go, их незачем обсуждать еще раз, для каждого языка своя ниша, в го отлично писать сетевуху, но бизнес логику уже муторно, любой сложный проект в го юзает интерфейсы по полной, посмотрите код докера, qor. Хотя интерфейс это антипаттерн и замедляет работу приложения (давайте вспомним martini), по мнению авторов го, юзание интерфейсов является исключительным кейсом, но биг ворлд говорит, что это не так, и нужен, и полиморфизм, и перезагрузка функций, и что вообще интерфейс это не решение проблем. В языке должны быть другие языковые конструкции, иначе код обрастает ненужными ассертами интерфейса в тип, либо функциями addApple() addOrange() addHuman() и addEntity(...a) если подразумеваешь, что аргумента у функции может и не быть, а если он все таки есть, то нужно его достать а = а[0], а если эту функцию используют другие разработчики им еще нужно дать понять, что spread тут только для того чтобы иметь возможность опциональности аргумента, а не потому, что функция принимает их множество. И еще куча минусов, глупо говорить о выразительности го, ее нет, он императивен и туп как кувалда. Но разве кувалда не выполняет своих функций? С этим всё ок


Daniel
27.12.2016
20:38:48
это о чем речь?


[Anonymous]
27.12.2016
20:44:28
Задачи всегда весело решать, например достижение консенсуса между серверами и шаринга состояния между сервисами в кластере в го решается через левое по, месяц, с ором и танцами. В Erlang based это почти из коробки, и весело и надежно, и задача не успела вскипятить мозги. Я доволен как разработчик, команда довольна, что выкатила новую фичу. PO доволен, что ничего не упало с первого притока юзеров.
Думаете зря назрела инициатива goodlang? Один ? Плюс еще что-то там было
Все прекрасно знают минусы go, их незачем обсуждать еще раз, для каждого языка своя ниша, в го отлично писать сетевуху, но бизнес логику уже муторно, любой сложный проект в го юзает интерфейсы по полной, посмотрите код докера, qor. Хотя интерфейс это антипаттерн и замедляет работу приложения (давайте вспомним martini), по мнению авторов го, юзание интерфейсов является исключительным кейсом, но биг ворлд говорит, что это не так, и нужен, и полиморфизм, и перезагрузка функций, и что вообще интерфейс это не решение проблем. В языке должны быть другие языковые конструкции, иначе код обрастает ненужными ассертами интерфейса в тип, либо функциями addApple() addOrange() addHuman() и addEntity(...a) если подразумеваешь, что аргумента у функции может и не быть, а если он все таки есть, то нужно его достать а = а[0], а если эту функцию используют другие разработчики им еще нужно дать понять, что spread тут только для того чтобы иметь возможность опциональности аргумента, а не потому, что функция принимает их множество. И еще куча минусов, глупо говорить о выразительности го, ее нет, он императивен и туп как кувалда. Но разве кувалда не выполняет своих функций? С этим всё ок
Какие языки по твоему лучше справляется с поставленными задачами\лучше спроектированы?


Denis
27.12.2016
20:46:27

Alexey
27.12.2016
20:47:08
А можно опять с атомопроблемами? У меня в Атоме панелька пропала го-плюсная и не появляется. Я чем только не прообовал. И тесты вроде не запускаются при сохранении, хотя галочка стоит.

Denis
27.12.2016
20:47:41

[Anonymous]
27.12.2016
20:48:45

Quet
27.12.2016
20:49:03
не существует

Denis
27.12.2016
20:49:43
Если хоть с чем, то русский, очевидно

naim
27.12.2016
21:07:28

Vladimir
27.12.2016
21:08:16

Google


naim
27.12.2016
21:08:38
Задачи всегда весело решать, например достижение консенсуса между серверами и шаринга состояния между сервисами в кластере в го решается через левое по, месяц, с ором и танцами. В Erlang based это почти из коробки, и весело и надежно, и задача не успела вскипятить мозги. Я доволен как разработчик, команда довольна, что выкатила новую фичу. PO доволен, что ничего не упало с первого притока юзеров.
Думаете зря назрела инициатива goodlang? Один ? Плюс еще что-то там было
Все прекрасно знают минусы go, их незачем обсуждать еще раз, для каждого языка своя ниша, в го отлично писать сетевуху, но бизнес логику уже муторно, любой сложный проект в го юзает интерфейсы по полной, посмотрите код докера, qor. Хотя интерфейс это антипаттерн и замедляет работу приложения (давайте вспомним martini), по мнению авторов го, юзание интерфейсов является исключительным кейсом, но биг ворлд говорит, что это не так, и нужен, и полиморфизм, и перезагрузка функций, и что вообще интерфейс это не решение проблем. В языке должны быть другие языковые конструкции, иначе код обрастает ненужными ассертами интерфейса в тип, либо функциями addApple() addOrange() addHuman() и addEntity(...a) если подразумеваешь, что аргумента у функции может и не быть, а если он все таки есть, то нужно его достать а = а[0], а если эту функцию используют другие разработчики им еще нужно дать понять, что spread тут только для того чтобы иметь возможность опциональности аргумента, а не потому, что функция принимает их множество. И еще куча минусов, глупо говорить о выразительности го, ее нет, он императивен и туп как кувалда. Но разве кувалда не выполняет своих функций? С этим всё ок
+1
на западе его вообще много
в провах он везде как стандарт


Alexey
27.12.2016
21:17:45

Ivan
27.12.2016
22:19:18
Что-то у меня Го юзает всего 1 ядро. Причём судя по утилитке ниже, он видит 4. Принудительно runtime.GOMAXPROCS(4) не помогает. Куда копать? Пока грешу на компилятор. https://gist.github.com/peterhellberg/5848304

Daniel
27.12.2016
22:20:13
это на какой платформе?

Ivan
27.12.2016
22:20:46
винда 7 и 2008R2
х64

Daniel
27.12.2016
22:21:12
тогда не компилятор
а как вы определили, что используется одно ядро?

Vladimir
27.12.2016
22:21:46
@TheVaN4 а код како, который не грузит больше 1 ядра?
может код такой что больше не может?

Ivan
27.12.2016
22:22:56
Глазами в тасках увидел) Суть кода простая, парсит файл, 1 ядро под 100% на 2-5 минут уходит

Vladimir
27.12.2016
22:23:07
вопрос же в том как он парсит )
если ты делаешь 1 горутину (или вообще без них) то ему как бы и нечего паралелить

Daniel
27.12.2016
22:23:43
я начал подозревать нехорошее...

Ivan
27.12.2016
22:23:56

Daniel
27.12.2016
22:24:39
не хочу никого обидеть, но это то самое bullshit bingo

Ivan
27.12.2016
22:25:16
Я почему то думал что любая 1 задача в состоянии отъёсть сколько влезет. А так то поток один, как я уже осознал..

Google

Vladimir
27.12.2016
22:25:31
в Го делать горутины просто и даже есть свой шедулер который определяет какая из них работает, но параллелить код за тебя язык не сможет

Daniel
27.12.2016
22:26:36
потому, что это могут только функциональные языки (и потому за ними будущее)

Ivan
27.12.2016
22:28:17

Daniel
27.12.2016
22:30:08
Скорее нет
Но зависит от задачи
Из горутины значение надо через канал возвращать

Phil
27.12.2016
22:31:16

Daniel
27.12.2016
22:31:44
И порядок обработки может нарушаться

Phil
27.12.2016
22:31:50

Daniel
27.12.2016
22:32:15
А чего не работает-то?

Ivan
27.12.2016
22:32:43

Vladimir
27.12.2016
22:33:19
@TheVaN4 всегда зависит от задачи

Phil
27.12.2016
22:33:44

Daniel
27.12.2016
22:34:25

Ivan
27.12.2016
22:35:01
@TheVaN4 всегда зависит от задачи
На входе: куча данных и мусора. На выходе некие критические сообщения. Пока думаю в файл загонять, как/куда потом их девать видно будет.

Vladimir
27.12.2016
22:35:39

Ivan
27.12.2016
22:37:14
Пока придумал как сделать чтобы файл не парсить от и до каждый раз, выход делать хэш/хэши. Сам актуальных хэш хранится во временном файле (чтобы выжил и после ребута), до начала парсинга и структурирования идёт как раз отброс мусора и выкидываю всё до последнего прочитанного значния.

Vladimir
27.12.2016
22:37:59
смотря что у тебя на вход и в каком виде. Пока это звучит как греп, а он должен на каком-нибудь powershell работать очень быстро

Google

Vladimir
27.12.2016
22:38:08
даже если парсить по регуляркам и постоянно
и ты ж понимаешь что считая хэш ты читаешь весь файл?
или сколько там ты подсчету сбагриваешь

Subbotin
27.12.2016
22:38:49
Угу. Чувак явно городит костыли на пустом месте

Vladimir
27.12.2016
22:39:13
у тебя операция подсчета хэша может быть также затратна как и поиск сообщений

Ivan
27.12.2016
22:39:25

Subbotin
27.12.2016
22:39:37
Греп или эластиксер в зависимости от ситуации спасут

Vladimir
27.12.2016
22:40:02

Ivan
27.12.2016
22:40:22

Vladimir
27.12.2016
22:40:37
формат файла какой?

Admin
ERROR: S client not available

Ivan
27.12.2016
22:42:12

Vladimir
27.12.2016
22:42:21
2 минуты это как-то очень много

Ivan
27.12.2016
22:43:22
Ну пока *.log) Кроме поиска решил забабахать структуру, т.к. в файле месиво просто, а хотелось бы по атрибутам обращаться к каждому элементу

Vladimir
27.12.2016
22:46:45
Кстати тебе маленький хинт - сохраняй не хэши строк, а позицию а файле
И делай туда seek

Phil
27.12.2016
22:49:56

Google

Ivan
27.12.2016
22:50:45

Vladimir
27.12.2016
22:51:50

Ivan
27.12.2016
22:53:07

Vladimir
27.12.2016
22:53:26

Ivan
27.12.2016
22:53:53
В моём случае:
func hash(s string) uint32 {
h := fnv.New32a()
h.Write([]byte(s))
return h.Sum32()
}

Vladimir
27.12.2016
22:54:42
Не, я про то что оно делает

Alexey
27.12.2016
22:55:41

Ivan
27.12.2016
22:57:16
Не, я про то что оно делает
Грубо говоря: берётся хэш из файла (который был ранее создан), затем идёт создание хэшей снизу вверх по массиву логов и их сравнение.
Вот тут тоже беда что всё в 1 поток

Vladimir
27.12.2016
23:00:16
Вообще в го встроен профилировщик
Оно тебе покажет узкое место

Ivan
27.12.2016
23:00:43

Vladimir
27.12.2016
23:00:50
И можно написать микробенчмарки
Я конечно не знаю алгоритма фильтрации и что ты с данными делаешь, но я думаю оптимальное решение будет давать около ляма в секунду на ядро

Ivan
27.12.2016
23:04:31
И можно написать микробенчмарки
По времени исполнения, узкое место сам парсинг/структурирование. Возможно я его зря прикрутил туда, ну уж больно охото было посмотреть на возможности языка)

Vladimir
27.12.2016
23:31:49

Roman
27.12.2016
23:43:46
По моим приккидкам просто включение regexp с самым простейшим матчингом замедляет чтение строк в 5 раз
У меня написан парсер логов который из 1 большого файла делает 256 маленьких :)