
Anton
06.06.2017
12:23:40
ну а дальше просто пишешь что-то такое
data = (1..100).map { [rand(10), 2, rand(10)] }
GC.disable
before = GC.stat(:total_allocated_objects)
data.each_with_object({}) { |a, b, c, hash| hash[a] = c if b == 2 }
p GC.stat(:total_allocated_objects) - before
GC.start
before = GC.stat(:total_allocated_objects)
hash = {}
data.each { |a, b, c| hash[a] = c if b == 2 }
p GC.stat(:total_allocated_objects) - before
и в моем случае each_with_object создает на 2 объекта больше, это не сильно критично, и во всяких бенчмарках будет проскальзывать 10% разницы по выполнению

Roman
06.06.2017
12:25:05
ну на 2 объекта больше это конечно не разница. вот если бы на 2*n :)

Google

Roman
06.06.2017
12:25:33
просто есть понятие idiomatic ruby - код понятный и принимаемый большинством прогеров

Anton
06.06.2017
12:25:53

Roman
06.06.2017
12:26:36
интересно блин где ж там лишние аллокации. прям хз

Anton
06.06.2017
12:27:15

Roman
06.06.2017
12:27:31
это да

Anton
06.06.2017
12:28:10
но это только для больших наборов данных

Alexander
06.06.2017
12:30:18
и аллокаций поменьше ?
ну а дальше просто пишешь что-то такое
data = (1..100).map { [rand(10), 2, rand(10)] }
GC.disable
before = GC.stat(:total_allocated_objects)
data.each_with_object({}) { |a, b, c, hash| hash[a] = c if b == 2 }
p GC.stat(:total_allocated_objects) - before
GC.start
before = GC.stat(:total_allocated_objects)
hash = {}
data.each { |a, b, c| hash[a] = c if b == 2 }
p GC.stat(:total_allocated_objects) - before
спасибо, попробую. не знаю, насколько норм измерение, и насколько большие эти 2 объекта

Anton
06.06.2017
12:32:52

Google

Anton
06.06.2017
12:33:35
там не совсем в си дело, а в том, как ты с данными работаешь

Lupsick
06.06.2017
12:38:11
кто-нибудь собирал kubernetes-кластер из docker-compose?

Alex
06.06.2017
12:40:30

Sergey
06.06.2017
12:58:50
@ru_docker

Ярослав
06.06.2017
13:02:38
#hanami
Короче говоря, добил я в итоге пример, чтобы получить ошибку с i18n и dry-v.
https://gist.github.com/jarosluv/b6868e13736fc4e1be1321a933adca92
Внёс ещё пару коррективов и стало ещё прикольнее
puts FooSchema.(params[:foo]).errors # GOOD
puts action.call(params) # FAIL
Если запрашиваем схему напрямую, то всё ок, если через контроллер, то схема не может найти перевод...
@flash_gordon @davydovanton мб вам будет интересно

Vasiliy
06.06.2017
13:13:41
пушто напами ни нужон

Anton
06.06.2017
13:22:51

Vasiliy
06.06.2017
13:23:51
0, он же не нужен

Anton
06.06.2017
13:26:08
0, он же не нужен
ну кстати, я бы на твоем месте попробовал все же. 20 минут времени всего, но посмотришь на рельсу по другому

Alex
06.06.2017
13:26:39
типа "ура, спасибо рельсы что вы есть"

Anton
06.06.2017
13:27:11
мне будет интересно, правда
ну собственно вот, не такой большой гайд
http://hanamirb.org/guides/getting-started/
за вечер реально осилить
из того, что может быть интересно:
- валидация под каждый экшен, а не под контроллер
- амбрелла архитектура (это как в фениксе, куча изолированных аппов)
- репозиторий паттерн
- ром
- изолированные экшены (нет портянки из одного контроллера), поэтому "тоникие" контроллеры просто отпадают как класс
- вью объекты вместо хелперов

Google

Anton
06.06.2017
13:32:01
как минимум, после гайда может появится понимание того, что можно улучшить в рельсе и как это делать

Alex
06.06.2017
13:32:15
например засунуть ненужный паттерн репозиторий, ага.

Vasiliy
06.06.2017
13:32:18
> - репозиторий паттерн
вот это вот мне прям больше всего не нравится

Alex
06.06.2017
13:32:30

Anton
06.06.2017
13:32:40

Vasiliy
06.06.2017
13:32:48
??

Anton
06.06.2017
13:32:52
ну, кроме того, что это не привычный АР?

Alex
06.06.2017
13:32:54
а в чём его преимущества?
я так понимаю он дает то что схема базы и филды модели теперь друг с другом напрямую не связаны, верно?

Anton
06.06.2017
13:33:32
изолируется 2 разных логики

Alex
06.06.2017
13:33:35
т.е я получил модель и совсем не факт что в базе оно так лежит.

Anton
06.06.2017
13:33:48

Alex
06.06.2017
13:33:49

Vasiliy
06.06.2017
13:33:55
на каждый чих портянку сиквела херачить и вызывать как прослойку лишний слой - зачем?

Anton
06.06.2017
13:33:57

Alex
06.06.2017
13:34:09
а зачем эта прослойка? почему база не отображает бизнес логику?

Anton
06.06.2017
13:34:13

Vasiliy
06.06.2017
13:34:21
я её не пишу

Alex
06.06.2017
13:34:22
по мне так это заталкивание проблем поглубже.

Anton
06.06.2017
13:34:49

Google

Anton
06.06.2017
13:34:53
это так то разные вещи

Alex
06.06.2017
13:35:05
как я в отрыве от базы буду считать большие данные?

Anton
06.06.2017
13:35:10
я её не пишу
ну, я могу сказать так же, никаких портянок кода нет
ты говоришь про какой-то отрыв от базы данных
можешь пояснить?

Vasiliy
06.06.2017
13:35:43

Admin
ERROR: S client not available

Alex
06.06.2017
13:36:16
можешь пояснить?
ну как я понимаю ты сначала достаешь из базы данные, делаешь их них модели и уже по моделям считаешь что нужно, верно?

Anton
06.06.2017
13:36:17
у тебя есть репозиторий, который отдает тебе энтити (дата объекты)

Vasiliy
06.06.2017
13:36:51
тем что совсем банальщину не херачишь в репо это

Anton
06.06.2017
13:37:05

Alex
06.06.2017
13:37:21

Anton
06.06.2017
13:37:32
ну, у тебя АР маппит данных больше
потому что там еще в кишках ты валидацию вызвать можешь и кучу всего

Vasiliy
06.06.2017
13:38:05
в общем, я думаю это спор в никуда, я попробовал подход с репозитори(в симфони2) и мне он не понравился(понравилось только что миграции генерятся автоматом)

Alex
06.06.2017
13:38:09
ну в случае с AR у меня нет промежуточной прослойки, я точно знаю текущую схему базы

Google

Alex
06.06.2017
13:38:23
она не заизолирована, она часть приложения. Надо - выполнил голый или полуголый SQL.

Anton
06.06.2017
13:38:28
что мешает сделать релейшен явный?

Vasiliy
06.06.2017
13:38:44
с АР проблемы что оно всё нахуй грузит при запросе

Alex
06.06.2017
13:38:54
подожди, зачем мне репозиторий если я могу сделать голый SQL запрос?

Anton
06.06.2017
13:38:57
например такое
это то, что забирается из таблицы, т.е. маппинг явный таблицы на твою модель
ты можешь еще замапить энтити на нужные данные из таблицы

Alex
06.06.2017
13:40:06
давай проще, тебе надо посчитать медианное значение какого то поля в базе, в базе мульон записей. Есть эффективный способ сделать это в ром?

Anton
06.06.2017
13:40:15
ну, как ты это в АР делать будешь?

Alex
06.06.2017
13:40:32

Anton
06.06.2017
13:40:38
какой-нибудь Use.exec_sql('...'), так?

Nikita
06.06.2017
13:40:44
че-то какой-то набор суеверий)

Alex
06.06.2017
13:40:54

Anton
06.06.2017
13:40:56

Alex
06.06.2017
13:41:41
в чатике наверное для того и сидят чтобы делиться знаниями и разговаривать о подходах.
я же не скрываю что я с ром не работал.
Потому и интересуюсь как оно там устроено.