Zoom Logo

Tech Debates Webinar | Ruby vs Python - Shared screen with speaker view
Артем Иванов
01:47:18
есть ли Руби вне Рельс?
Slav O
01:49:56
hi everyone
Nikita Melentev
01:49:59
Как получилось что у руби доставка либ такая крутая (гемы)? А у питона только сейчас на эту тему идут подвижки? Каждая либа, которой нужна компиляция (раст, кресты и т.д.) делает какие-то неимоверные усилия чтобы всё это ставилось из исходников через pip/
nibeon
01:51:32
а как же Kivy ,?
Nikita Melentev
01:52:51
Python взлетел потому что в руби есть end :D
Vlad Kryvoruchko
01:53:01
lol
S K
01:53:36
Что за графики ?
Vlad Kryvoruchko
01:53:46
Stackoverflow survey
S K
01:53:59
за 2013
S K
01:54:06
?
Denys Shvedchenko
01:54:29
руби вне рельс - есть в chef
Anton Dolhov
01:54:34
то что сказал Влад про Python применимо к Ruby:1) максимально легкий синкаксис для понимания2) максимально мало кода надо писать3) есть множество готовых решений
Vlad Kryvoruchko
01:54:44
Саш, какой год ?:D
S K
01:55:14
&. ?
Nikita Melentev
01:55:17
Ага
Yevhen Dubovskoi
01:55:31
do .. end думаю
S K
01:55:47
.& = safe method invocation
S K
01:56:19
&. = safe method invocationYou mean this AND?
nibeon
01:56:28
вопрос - где применяется jRuby?
Артем Иванов
01:56:44
расскажите, плз, почему так хвалят Руби для написания ДСЛ?
Vlad Kryvoruchko
01:58:22
Тоха не трави меня :)
Anton Dolhov
01:59:50
я не травлю, я просто пытаюсь понять, как змеюка задушила драгоценный камень)
S K
01:59:56
https://www.slant.co/versus/1233/1398/~ruby-on-rails_vs_flask
Yevhen Dubovskoi
02:00:03
Elixir/Haskell тогда вообще идеален для DSL)
Yevhen Dubovskoi
02:02:29
MyPy & typing решит эту проблему. Интересно, есть ли подобные решения для Ruby?
Nikolay Yenin
02:05:58
Что касательно разницы в производительности?
Nikolay Yenin
02:06:44
В каких случаях и задачах Руби может быть производительнее чем Пайтон и наоборот?
Katya Petrova
02:07:22
Блок про производительность будет дальше
Artem Kirienko
02:07:28
Если про type checking в Ruby, то есть Sorbet (пока не сильно популярен).
Yevhen Dubovskoi
02:07:40
Тут надо немного контекста: это статический анализатор для Python
Nikita Melentev
02:07:41
:D
Mikhail Gnezdilov
02:07:41
При использовании библиотек на Си и фортране - Пайтон быстрее… :-)
Yevhen Dubovskoi
02:07:51
Использует typing модуль для анализа
Nikolay Yenin
02:08:27
Спасибо
Artem Kirienko
02:08:37
>статический анализатор для Python
S K
02:08:40
Ruby or Python for AWS Lambda?
Artem Kirienko
02:10:02
RuboCop + fasterer для статического анализа кода — это ± стандарт для проектов на руби
Yevhen Dubovskoi
02:12:43
Есть ли хорошо развитые микрофреймворки на Ruby, по типу Flask? Потому что большие, battery included фреймфворки, которыми гвоздями прибит ORM и ActiveRecord (это я про Django) должны уйти в прошлое, как по мне.
Yevhen Dubovskoi
02:13:42
И еще Python 2 не поддерживается с января 2020 :-D
Никита М
02:14:00
Sinatra например, правда не знаю насколько хорошо он развит
Artem Kirienko
02:15:46
>хорошо развитые микрофреймворки на Ruby, по типу FlaskSinatra, Roda, Rack. Ещё есть Hanami, но это скорее не микро-фреймворк
nibeon
02:17:14
а Padrino? он вроде на стнатре основан
Артем Иванов
02:20:46
есть asyncIO (like nodeJS)?
Oleksandr Stetsenko
02:21:01
Как не превратить Python-код в очень плохой Java-код с помощью MyPy?
Артем Иванов
02:21:02
Сложно/дорого вызвать скомпилированный код (на С)?
Vladyslav Khardel
02:22:36
странно, что никто до сих пор не спроcил про GIL)
Nikita Melentev
02:22:51
а что про него спрашивать?
Yevhen Dubovskoi
02:23:06
MyPy + typing решает одни проблемы, но походе создает другие :-D
Yevhen Dubovskoi
02:23:14
> Как не превратить Python-код в очень плохой > Java-код с помощью MyPy?
Oleksandr Stetsenko
02:25:55
Когда пытаешься держать 99 симлов в строке + асинхронщину типизировать код похож на ад)
Anton Dolhov
02:26:05
ну написать плохой код с arrow функциями можно на любом языке, так-то
nibeon
02:26:27
кстати, а запись этого дела где-то будет потом?
Nikita Melentev
02:27:55
mypy помгает линтеру и ide
Katya Petrova
02:28:08
да, запись будет
Yevhen Dubovskoi
02:28:12
Native extensions - это даже не FFI, что то еще круче?
nibeon
02:28:15
кстати, а как там дела с языком Crystal?
Anton Dolhov
02:28:35
под arrow функциями имел ввиду множестов вложенных условий if unless итп
Yevhen Dubovskoi
02:28:51
К руби
Yevhen Dubovskoi
02:29:05
На пайтоне ctypes и FFI
Artem Kirienko
02:29:06
• Ruby-FFI is a gem for programmatically loading dynamically-linked native libraries 🤔
Yevhen Dubovskoi
02:29:14
Подключается через Foreign Interface Functions?
Yevhen Dubovskoi
02:29:33
Foreign Functions Interface - сорри
Anton Dolhov
02:29:46
руби самый читабельный и удобный
Nikita Melentev
02:29:48
whitespace
Artem Kirienko
02:29:52
✅English
Lenur Serveriev
02:29:55
java
Никита М
02:30:24
по читаемости - Руби в общих случаях читается как английский язык. лучше не встречал
Oleksandr Stetsenko
02:30:44
Go - неплохой вариант
Nikita Melentev
02:31:01
cffii технология для лиспа вроде, она универсальная и для ruby наверняка есть
Никита М
02:31:36
Голанг - отвратителен после руби. имхо из опыта
Yevhen Dubovskoi
02:32:04
Rust - великолепен во всем :-D
nibeon
02:32:33
что с языком Crystal? взлетит или нет?
Nikita Melentev
02:35:31
Если прототип на руби, то после завершения созодания прототипа что будет с разработчиками, которые его сделали?
Oleksandr Stetsenko
02:35:36
StartUp / Product / Outsorce - на каком уровне разработчику куда лучше идти?
Ilyas
02:36:59
Есть некоторый опыт портирования монолитного приложения с rails на django.Скорость изучения и время на адаптацию минимальное.Но по ощущениям джанго по уровню развития отстает от рельсов.
Lenur Serveriev
02:36:59
идти в machine learning после формошлеп... думаю не зайдет )
Artem Kirienko
02:37:01
🎉Ответ на вопрос про FFI. Нет, native extensions и ffi — это разное и работает по разному.There are two common approaches to working with C from Ruby:✅Write a native extension directly in C and use MKMF to manage it;✅Bind directly with an existing C component using FFI.
Никита М
02:37:30
> Если прототип на руби, то после завершения созодания прототипа что будет с разработчиками, которые его сделали?

доучить пару новых языков и распилить всё на микросервисы
Nikita Melentev
02:38:18
ну, некоторые любят инструменты которыми пользуются и не пойдут на смену технологий
Никита М
02:38:55
программист одного языка в наше время уже не актуально
Oleksandr Stetsenko
02:39:28
> программист одного языка в наше время уже не актуально - 100%
Никита М
02:40:48
веб всё чаще пилят на микросервисах с разными языками под разные нужды. сейчас время full stack разработчиков
Stanislav Honcharenko
02:41:15
Что думаете о будущем web scraping и почему?
Vladimir Valgis
02:41:47
написав прототип они сначала будут страдать его поддерживая и расширяя, потом сбегут, а бизнес будет страдать пытаясь найти разработчиков
Anton Dolhov
02:42:53
для руби разработчика в 2020 есть 2 варианта:1) писать MVP стартапы2) поддерживать легаси проекты - там поле не паханное (всегда в паре с чем-то еще)
Nikita Melentev
02:42:59
у меня другое мнение по этому вопросу (про несколько языков), железо дешевеет, всё что упирается в cpu переписано на си уже давно. Питон — отличный клей для си. Поэтому другой язык наверное нужен если ты создаёшь эти быстрые либы, что-то связанное с ос, мобилки и фронтенд.
Yevhen Dubovskoi
02:43:36
Ой щас начнется :-D
Denys Shvedchenko
02:43:54
ой. надо понимать зачем перекидывать файлики ))
Yevhen Dubovskoi
02:44:36
Та ну, меняешь параметры, пока не получишь меньше ошибок на выходе))
Oleksandr Stetsenko
02:46:15
ЛунЮА - живет на этом)
Yevhen Dubovskoi
02:46:22
DistillNetwork и js-рендеринг убъет веб-скрапинг скоро)
Artem Kirienko
02:47:06
А зачем прототип переписывать ещё на что-то? Есть пост в блоге DHH (автор Rails, CEO Basecamp) «Only 15% of the Basecamp operations budget is spent on Ruby», где объясняется, почему компаниям по размеру как Basecamp, не стоит бежать переписывать весь код с руби на что-то, чтобы сэкономить на дата-центрах
Никита М
02:48:27
интересно, почитаем
Oleksandr Stetsenko
02:49:23
Вот на этом и подключается GO :)
Nikita Melentev
02:49:30
Кстати, вспоминается instagram, который отключал gc в питоне чтобы сэкономить не серверах. Это к вопросу о переписывании и прототипах.
Yevhen Dubovskoi
02:49:41
В опозицию к @Artem Kirienko - есть другой пример - Dropbox, которые перепилили весь свой Sync Engine на Rust, потому что поддерживать его на Python стало слишком сложно, даже аге смотря на инкрементальные улучшения
Yevhen Dubovskoi
02:50:01
Буквально на той неделе был пост в их блоге
Artem Kirienko
02:50:49
Ну вот буквально в паре предложений.Если отбросить общие вещи SQL/Kafka/ElasticSearch (вещи, которые на любом языке будут использоваться), то:>Let’s imagine that there was some amazing technology that would let us do everything we’re doing with Ruby on Rails, but it was **TWICE AS FAST**! That would save us about ~$225,000 per year.>We spend more money than that on the Xmas gift we give employees at Basecamp every year.
Vladimir Valgis
02:52:25
screenshot from localhost?
Nikolay Yenin
02:53:07
Простите, прослушал
Никита М
02:53:12
кто знаком с Elixir, может ли этот язык решить проблему производительности? если критичные вещи на нём переписать
Nikolay Yenin
02:53:17
Услышал какое то сравнение с  JS?
Yevhen Dubovskoi
02:53:26
Если у тебя Django - то никакой девопс не спасет от стандартного WSGI-workers подхода
Vlad Kryvoruchko
02:53:38
Benchmarks:
Vlad Kryvoruchko
02:53:40
https://www.techempower.com/benchmarks/
Oleksandr Stetsenko
02:56:13
B2B 60-100 миллионов обменов документов в сутки. Живем на Python + AWS Lambdas
Yevhen Dubovskoi
02:56:26
Конечно: https://pycoders.com/link/3801/nw5y50vw5v
Yevhen Dubovskoi
02:56:37
https://dropbox.tech/infrastructure/rewriting-the-heart-of-our-sync-engine
Katya Petrova
02:56:40
Спасибо :)
Yevhen Dubovskoi
02:58:00
По-моему сфера применения Elixir - это та же, как и Erlang/OTP (учитывая, что там тот же BEAM)
Vladimir Valgis
02:58:06
Эликсир поможет обрабатывать потоки в параллель очень эффективно, но вычислительная нагрузка у него так себе
Anton Dolhov
02:58:26
есть такое дело, еликсир требует времени, чтобы вникнуть
Nataliia Getlin
02:59:06
Ребята, спасибо большое! Перестала вас понимать, буду отключаться )). Хотела для себя понять какой язык начать осваивать. Изначально остановилась на Python, но программа bootcamp на который я нацелилась основана на Ruby on Rails. Было интересно вам слушать, Спасибо за ваше время и готовность делиться знаниями.
Katya Petrova
02:59:44
Оставайтесь, впереди еще будут отвечать на вопросы :)
Vladimir Valgis
03:00:43
Natalia overflow
Борис Крутских
03:00:48
Раскажите немного о asyncio/aiohttp когда и зачем его нужно использовать?
Dmytro Cherkaskyy
03:03:35
А спасет ли Django3 & ASGI в контексте ‘стандартного WSGI-workers подхода’?
Andrii Bobrovych
03:03:55
https://dropbox.tech/infrastructure/rewriting-the-heart-of-our-sync-engine
Yevhen Dubovskoi
03:05:47
> А спасет ли Django3 & ASGI в контексте ‘стандартного WSGI-workers подхода’?
Учитывая, что Django 3 - только начало долгого пути по полноценному asyncio, тем более, что куча либо после этого станет бесполезными - думаю у Джанго нет шансов стать полноценным асинхронным фреймворком
Yevhen Dubovskoi
03:07:59
Потому что GIL - не проблема)
Nikita Melentev
03:09:57
в питоне есть subinterpreters, повзолит запускать "несколько питонов" в одном процессе и нескольких тредах чтобы грузить все ядра.
Nikita Melentev
03:12:42
асинхронщина в питоне, опять-таки, решает проблему ожидания io. Это ещё один аргумент в сторону того, что числодробилки написаны уже на быстрых языках и оптимизированы.
nibeon
03:13:41
зачем джангу делать асинхронной, если она как бы не про это вроде
Nikita Melentev
03:14:40
в том и дело, асинхронность не влияет на бизнес код и логику, но даёт преимущества.
Nikita Melentev
03:15:29
да никто с ними не работал пока =) там только строки сувать можно
Yevhen Dubovskoi
03:15:54
Sub interpreters же пока только на уровне c-api доступнен? Или уже приняли PEP по ним?
Nikita Melentev
03:16:23
уже можно на уровне питон кода использовать
Anton Dolhov
03:16:28
надо было устраивать дебаты Kotlin vs Python :)
Artem Kirienko
03:17:31
Функции без сайде эффектов?
Yevhen Dubovskoi
03:17:47
@Nikita Melentev - вроде пока только Draft: https://www.python.org/dev/peps/pep-0554/
Артем Иванов
03:17:53
-
Nikita Melentev
03:17:56
чисто функциональными нет
Vladimir Valgis
03:18:04
ну такое
Yevhen Dubovskoi
03:18:05
Они оба поддерживают функциональный стиль программирования
Nikita Melentev
03:18:11
они мультипарадигмальные
nibeon
03:18:13
они мультипарадигменные как бы)
Yevhen Dubovskoi
03:18:24
Никто не мешает писать на них монады, функторы и прочий функциональный тулинг
Yevhen Dubovskoi
03:18:48
Другое дело, что в Python стандартные лямбды чаще всего работают медленней list-comprehensions)
Артем Иванов
03:19:20
ФП, как обычно все умеют, а что у вас с- иммутабельными данными и их скоростью работы- каррирование из коробки- изолированием IO, например через монады-многопоточность на основе чистых функций
nibeon
03:19:35
на питоне кстати написан диалект лиспа - Hy. Правда хз на сколько Hy функционален (хотя раз это лисп...)
Yevhen Dubovskoi
03:19:44
Тот же filter(lambda x: x %2 == 0, some_list) будет медленней такого же компрехеншена
Nikita Melentev
03:20:50
скорость никого не интересует пока код на питоне
Nikita Melentev
03:20:56
важна читабельность
Artem Kirienko
03:21:43
В руби проектах регулярно вижу dry-rb (dry-monads, например), считаю, что функциональный стиль вполне популярен в руби-коммьюнити
Yevhen Dubovskoi
03:24:06
В питоне из коробки есть кадрирование (вернее, его подобие), через functools (это стандартная библиотека) - functools.partial
Yevhen Dubovskoi
03:24:16
*каррирование
Nikita Melentev
03:26:06
функциональный стиль быстро становится нечитаемым в питоне. Это проблема питона или функционального стиля?
Yevhen Dubovskoi
03:26:07
def sum(a, b): a + b;
Yevhen Dubovskoi
03:26:18
f = partial(a, 5)
Артем Иванов
03:26:19
вот в этом то и дело, все нужно самому дописывать, а работа интерпритатора с ФП сильно проседает
Yevhen Dubovskoi
03:26:21
f(3)
Nikita Melentev
03:30:12
Идеальное положение скорее всего где-то между динамикой и статикой. type annotations вполне подходят на эту роль в питоне.
Nikita Melentev
03:31:14
Ну вот кстати да, в динамике тесты везде, а коллеги на плюсах тесты вообще не используют.
Артем Иванов
03:31:54
ходят легенды, что если у тебя чистые функции и иммутабельные структуры, то код из коробки может исполнятся параллельно
Vladimir Valgis
03:32:02
Статическая типизация появилась для экономии ресурсов бедных компьютеров, чтобы объяснять на ассемблеру куда и как это аккуратно распихать в памяти. А теперь из этого какой-то фетиш сделали. Контрактны надо поддерживать между элементами системы, а не пытаться прям строгую типизации везде пихать
Артем Иванов
03:34:18
типы могут быть гарантами корректности (изоморфизм Карри-Говарда), а не только оптимизировать рантайм
Yevhen Dubovskoi
03:35:36
Типизация драматически снижает количество ошибок, как по мне. Так что речь тут не только о производительности. Алаймент структур и планирование памяти - это просто еще один плюс статически типизированных языков
Vladimir Valgis
03:37:11
Так то и есть контракты, а вот статика для алаймента это прошлый век-с
Anton Dolhov
03:37:47
а вот котлин например в 80-90% случаев сам может определить, какой тип данных присвоить переменной или функции, об этом даже не нужно заморачиваться
Yevhen Dubovskoi
03:38:55
Так почти все современные статические языки это могут - Go (вроде), Rust (точно), Haskell тот же имеет вывод типов во время компиляции
Anton Dolhov
03:39:46
в плане, что статическая типизация - не такая уж проблема, а скорее даже наоборот - преимущество
Nikita Melentev
03:42:38
Чем дальше тем больше отхождений от стандартов и тем менее пригодными становятся orm. Постгрес вводит свои фичи, скоро релизнется edgedb с миграциями как часть db. Некоторые коллеги отбрасывают orm и пишут код с драйверами db. (не подставляя строки кончено же, а используя нативные аргументы протоколов).
Nikita Melentev
03:43:03
Как вы считаете будет ли "новый язык запросов"?
Yevhen Dubovskoi
03:43:29
Вопрос: исходя из своей практики, не считаете ли вы, что миграции средствами фреймворка - это зло? Например, не было ли проблем с роллбеком миграций? Просто я все больше прихожу к мысли, что миграции вообще должны жить отдельно от основного проекта
Yevhen Dubovskoi
03:43:57
EdgeDB - прям конфета, быстрей бы релизнули 1.0
Yevhen Dubovskoi
03:44:10
Еще и ребята делают очень опытные (Селиванов и компания)
Vladimir Valgis
03:44:38
graphQL
Yevhen Dubovskoi
03:44:45
Это прямо next gen RDB
Anton Dolhov
03:44:48
^
Yevhen Dubovskoi
03:45:09
GraphQL же не база, а интерфейс взаимодействия с клиентами
Vladimir Valgis
03:45:27
Это язык запросов
Yevhen Dubovskoi
03:46:02
Ну да, но какое это отношение имеет к базам данных?
Vladimir Valgis
03:46:42
> Как вы считаете будет ли "новый язык запросов"?
Yevhen Dubovskoi
03:49:25
Я имел ввиду - миграции, как часть веб-фреймворка
Yevhen Dubovskoi
03:50:04
Дополню про миграции - речь не о удобстве, а скорее о том, насколько это будет поддерживаемо при росте проекта и его сложности
Yevhen Dubovskoi
03:51:24
Судя по тому, что сказал Олег - в рельсах миграции устроены правильней, чем в джанго
Yevhen Dubovskoi
03:52:24
Банальный пример - 10 приложений в проекте джанго, у каждого по 25 миграций в версии Б. Надо откатить на версию приложения А - вот здесь затык, надо писать свой велосипед
Artem Kirienko
03:54:09
(Но это же антипаттерн — несколько микросервисов + общая база) 🤔
Yevhen Dubovskoi
03:54:20
Это монолит, а не сервисы)
nibeon
03:54:28
pytorch вроде ещё есть
Yevhen Dubovskoi
03:55:07
@Artem - в джанг приложения - это просто способ организации функционала в монолите (ну и если правильно строить архитектуру - они очень легко режутся на сервисы в дальнейшем)
Anton Dolhov
03:56:17
ну в руби тоже есть engines, но переход к сервисам все равно болезненный получается
Anton Dolhov
03:57:12
в rails*
Artem Kirienko
03:57:17
На руби всё есть, но мало кто это видел или пользовал (хотя как-то видел вакансию, где были Ruby и ML в одном описании)
Artem Kirienko
03:57:19
https://github.com/arbox/machine-learning-with-ruby
Nick Ilashchuk
03:57:58
Какой фреймворк начать учить для вхождения в machine learning (Python)?
nibeon
03:58:09
может на руби тоже есть какой-то биндинг к Torch?
Yevhen Dubovskoi
03:58:53
Не фанат ML (в плане работы, мне кажется это очень скучным), но все-таки стоит признать, что ML хорош в сложных кейсах, когда стандартный алгоритмический подход становится менее эффективен
Artem Kirienko
03:59:05
(Опять же, часть из этих тулзов для ML в руби — это просто байндинг/адаптер/библиотечка/API к какому-нибудь tensorflow)
Vlad Kryvoruchko
04:01:29
https://www.pyimagesearch.com/
nibeon
04:06:09
а научные вычисление на рационе?
nibeon
04:06:18
на питоне
Yevhen Dubovskoi
04:06:26
азазаз
Anton Dolhov
04:06:30
кек
Artem Kirienko
04:06:39
Итоги:
Artem Kirienko
04:06:40
https://github.com/markets/awesome-ruby
Artem Kirienko
04:06:44
https://github.com/vinta/awesome-python
Yevhen Dubovskoi
04:06:48
Спасибо большое за дебаты!
nibeon
04:06:51
спасибо за дебаты)
Никита М
04:07:06
спасибо спикерам и организаторам
nibeon
04:07:07
и за ответы на вопросы)
Anton Dolhov
04:07:21
отличные дебаты!
Katya Petrova
04:07:25
Спасибо большое за участие в дебатах!
Артем Иванов
04:07:28
спасибо
Nick Ilashchuk
04:07:30
Спасибо за инфу!
Oleksandr Gaponenko
04:07:38
Дякую!
Yevhen Dubovskoi
04:07:53
Rust великолепен!
Yevhen Dubovskoi
04:07:58
Посмотри обязательно))
Katya Petrova
04:08:01
всем спасибо!
Nikita Melentev
04:08:02
=D
nibeon
04:08:09
пока