@proRuby

Страница 16 из 1594
Nick
07.04.2016
18:38:43
А насколько сложно/интересно/быстро на го писать бекенд с апи
Сложнее, чем на ноде или рельсах; интересно, но неудобно, долго. Необходимо понимать, что тебе на самом деле нужен го на бэке и зачем.

Vasilij
07.04.2016
18:39:35
вот, а с эликсиром все очень просто. Его делал Хосе, тот, который в кор рейлс был

очень много общего с руби в эликсире, а в фениксе с рельсами

Google
Vasilij
07.04.2016
18:41:26
он, кстати, в город к нам приежжал на прошлых выходных на руби-митап

крутой парень

Roman
07.04.2016
18:42:13
@Okamit окстить. С go что-то неладное происходит. Его во все дыры пихать начали. Друг в гугле работает, говорит видел go только в обработке логов и аналитике. Друг, конечно, не видел всего гугла, но все же и не только свой отдел. Еще можешь на продукты hashicorp посмотреть - системные решения на go тоже хорошо идут. По сравнению с elixir (+ OTP) go дает меньше гарантий безопасности и отказоустойчивости из коробки.

Nick
07.04.2016
18:43:03
> ~3 часа на руби против ~15 мин на эликсире Сталкивался с подобным, но спас celluloid :) Вместо 3х часов на руби получилось 15 минут на руби )

Nick
07.04.2016
18:44:54
Согласен, плюс это для прикладных задач ок, а в полноценном приложении -- не панацея.

NewsBot pro.ruby
07.04.2016
19:24:28
Get Your Conference Proposal Accepted https://t.co/hZzyRaAhPi

Long-term TCP socket monitoring in Ruby https://t.co/yHse59BcQl

Vlad
08.04.2016
03:22:24
может лучше на свифте беки писать?

Maksim
08.04.2016
07:12:27
Привет Можно ли в собственных функциях в моделях использовать стандартные методы валидации?

Просто я понимаю, что писать 7 if это полный бред

Или можно ли в валидациях прописать :on контроллер#функция? Чтобы работало только для этого контроллера и функции

Vlad
08.04.2016
07:40:38
в моделях не функции а методы

Google
Vlad
08.04.2016
07:41:17
можно

все это есть в мануле

Maksim
08.04.2016
07:42:06
Хорошо, методы Ну дак я и спрашиваю здесь, потому что либо мануал не нашёл, либо в мануале не нашел

Dmitry
08.04.2016
08:00:13
http://dry-rb.org/gems/dry-validation

вот тебе либа для валидаци

NewsBot pro.ruby
08.04.2016
11:25:12
Can anyone help me extract the apple emojis to png using Ruby? https://t.co/jMiV0kKmGa

How to exclude the modules of a class here https://t.co/iBKygfGtoI

Vlad
08.04.2016
15:54:49
Yuri
08.04.2016
17:12:33
Вчера показал пример кода техническому директору известной компании. Его разочаровало что код не в одну строку и без сахара. А то, что он оптимизирован под обработку больших данных и использует кэшированные запросы к базе данных даже не заметил. Рельсы стали слишком сладкими. И на ревью от твоего кода ждут красоты, а не производительности. Видимо пора переходить на Erlang :)

Vitaliy
08.04.2016
17:56:33
Если при первом взгляде на код (без комментариев) нельзя понять, что он делает - тогда разочарование оправдано

Если выбора не остается и приходится выбирать между производительностью и читабельностью кода - тогда вопрос сводится к тому, что выйдет экономичнее. Производительный код сэкономит на оборудовании, читабельный код - на зарплатах разработчикам. 

Yuri
08.04.2016
18:04:27
В том то и дело, что я сначало описал стоявшую передо мной задачу, как я ее решил и что можно еще сделать. Код аккуратный и читаемый. Но если использовать сахар, то он будет отрабатывать вместо 10 минут несколько часов. Например, я сделал запрос к базе с использованием include зависимых данных. Потом загнал их в массивы чтобы подсчитать и сравнить. Но на первый взгляд по rails best practice приходит на ум другое решение - использовать pluck(:id) и все записать в одну строчку. Но возникнет проблема n+1 и один запрос превратится в несколько миллионов.

https://gist.github.com/weazar/81fec7d442638c409fbc1e546be8b7ae

Этот код сравнивает несколько миллионов записей в базе.

Vitaliy
08.04.2016
18:16:08
Гист посмотрел, хорошо написан

Если разница - 10 минут против нескольких часов - такой код очень хорош однозначно

Sergey
08.04.2016
18:17:17
Согласен

Google
Артем
08.04.2016
18:17:22
почему все через each и <<, а не просто map(&:id)?

Yuri
08.04.2016
18:17:33
Sergey Zinoviev, да active record сейчас здесь слабое место. Я сначала на чистом sql написал. Но столкнулся с тем, что sidekiq вылетает с ошибкой, что соединение с базой уже используется. Пришлось вернуться к AR.

Sergey
08.04.2016
18:17:58
У меня проблема даже была не в самом запросе, а в сериализации полученных данных.

Проще сразу было получить хэш.

Yuri
08.04.2016
18:19:07
Артем Нистратов, да кстати хорошее замечание)

Sergey
08.04.2016
18:19:41
На самый худой момент можно и ActiveRecord::Base.connection заиспользовать

Артем
08.04.2016
18:19:43
все ругают сахар просто потому, что не умеют его применять

надо знать, что стоит за очередной "красивой" конструкцией

Yuri
08.04.2016
18:20:46
Сервер слабый у заказчика. Я пробовал 250, но память уходила в своп и сайт переставал отвечать. Сейчас нашел оптимальное значение 70 - 25 на sidekiq, 32 для puma и запас небольшой

Vitaliy
08.04.2016
18:20:50
тоже пара вопросов есть: 13 строка: Что, если сделать next if <условие>; и избавиться от вложенного условия? 32 строка и далее: Что, если использовать в одну строку map или inject или find_each вместо each? 44 строка и далее: Что, если использовать case when вместо if elsif? Те же строки: Что, если вынести это в приватные методы? Например, def genres_count(genres_size) и обращаться к ним

Nick
08.04.2016
18:21:10
Мне после беглого взгляда показалось, что там большая часть нагрузки приходится на инициализацию AR объектов. Как доберусь до дома посмотрю подробнее. )

Yuri
08.04.2016
18:23:40
Артем Нистратов, сахар  хорош, но не на больших объемах. Производительность Active Record например. Один разработчик пытается увеличить ее производительность, но все на том же месте.

Nick
08.04.2016
18:23:49
Иногда такие задачи лучше решаются с минимальным использованием рельс

Хороший SQL запрос может ускорить процесс в разы :)

Dmitriy
08.04.2016
18:25:41
вроде по логике код довольно неплохой, а вот по оформлению можно во многих местах сделать короче и читаемее (хотя тут кому как). написали выше - next if, map, в некоторых местах case, и всё это без вреда для итогового sql. и еще в глаза бросились присвоения в конце методов

но это всё косметика

Yuri
08.04.2016
18:26:30
Nick Itch, а если заказчик хочет через админку этим делом управлять, то приходится выкручиваться. Конечно можно было бы это на crystal в несколько потоков запилить с чистым sql. Но задача стоит сделать на рельсах.

Nick
08.04.2016
18:27:16
Параметризировать sql тоже никто не мешает. Если задача про рельсы, вопросов нет :)

Yuri
08.04.2016
18:28:21
Dmitriy Ushkov, ну да это уже косметика, которую сейчас и ждут от разработчика. А за лесом деревьев не видят)

Google
Dmitriy
08.04.2016
18:33:33
Ну по сути эта косметика не требует лишних затрат времени, тут скорее дело в привычке. Может, ищут тех, кто пишет код, красивый как по сути, так и косметически.

Yuri
08.04.2016
18:33:34
Sergey Zinoviev, я изначально делал через ActiveRecord::Base.connection и sql, но в sidekiq вылетала ошибка что соединение уже занято.

Dmitriy
08.04.2016
18:34:00
Но это всё грустно, если честно

Артем
08.04.2016
18:34:08
здесь хоть кто-нибудь слышал про arel?

Dmitriy
08.04.2016
18:34:18
Косметике обручиться несложно, а код правильный писать не каждый может

Артем
08.04.2016
18:34:32
любой sql запрос можно написать в рамках rails

и быстро и читаемо

и кто-нибудь здесь проводил исследования производительности AR? что есть быстрее?

sequel? rom?

Yuri
08.04.2016
18:37:32
Да, sql раз в 10 быстрее

Артем
08.04.2016
18:38:08
ты потом hash будешь в страницу отображать?

Nick
08.04.2016
18:38:08
Быстрее возвращать json из БД :D

ты потом hash будешь в страницу отображать?
Так это ж вроде вписывается в рамки задачи

Артем
08.04.2016
18:39:06
тогда зачем ruby? делайте запросы прямо в теле страницы) как в php образца 2000-х

Nick
08.04.2016
18:39:16
Тут таска в бэкграунд

Артем
08.04.2016
18:40:12
ну вот, то вы о AR в общем, то снова прыгаете к конкретике

Nick
08.04.2016
18:40:59
Я вроде в контексте задачи оставался )

Yuri
08.04.2016
18:41:34
Vitaliy Emeliyantsev, find_each по моему вызовет прямой запрос к базе. А case when там надо будет городить громоздкую конструкцию, потомучто сравнения есть >= а не просто булевы значения.

Nick
08.04.2016
18:41:34
Крайности -- тоже плохо. Технологии надо использовать там, где они нужны

Google
Yuri
08.04.2016
18:44:03
Это расчет коэффициента близости между фильмами для рекомендательной системы. На странице ничего не выводится. Только в результате похожие фильмы.

Артем
08.04.2016
18:44:03
Yuri
08.04.2016
18:44:24
Active Record

Артем
08.04.2016
18:45:07
Пример можно?

Nick
08.04.2016
18:46:19
А почему бы #genres_count вот так не написать: genres_size = @film.genres.count + comparison.genres.count ...

Артем
08.04.2016
18:46:55
нет, это вызовет запрос к бд

когда все данные уже в памяти

Yuri
08.04.2016
18:47:37
Это примерно, я сравнивал работу этого алгоритма на sql и AR. Тут разница от кода зависит, но она существенная. Вот кстати статья в тему ее производительности https://www.netguru.co/blog/back-to-thinking-sql-ruby-rails

Nick
08.04.2016
18:48:39
И if ... elsif выглядит не менее громоздким, чем case ... when

Артем
08.04.2016
18:49:50
интересно, что было бы, если все решения при создании программных продуктов принимались бы "примерно". а не принималось ли во внимание, что код на AR был написан далеко не оптимально? этот gist вызвал шквал комментариев

сохранилась ли версия на AR?

Nick
08.04.2016
18:50:55
нет, это вызовет запрос к бд
genres_size = @film.genres.to_a.count + comparison.genres.to_acount ... ? )

Артем
08.04.2016
18:51:13
так лучше)

я например тоже скептически относился к производительности AR

но на настоящих данных сравнил rom и AR... rom к слову использует sequel

вот там разница и правда имеет место быть

Nick
08.04.2016
18:53:22
В общем рефактор каунт методов в таком ключе без потери читаемости сократит количество кода процентов на 40 )

Артем
08.04.2016
18:53:42
rom выиграл только на bulk insert

Yuri
08.04.2016
18:53:47
Примерно, потомучто факт в том, что AR слабое звено в рельсах на высоких нагрузках. И если посмотреть код оптимизированных приложений, то там sql. По крайней мере в моей практике с legacy кодом так было почти всегда.

Артем
08.04.2016
18:54:10
в остальных тестах до 3х потеря производительности

Yuri
08.04.2016
18:54:59
На миллионе запросов разница в 3 раза превращается в тысячи лет.

на миллионах*

Страница 16 из 1594