Алексей@fuCtor
Backend developer
Information
- Rating
- Does not participate
- Location
- Санкт-Петербург, Санкт-Петербург и область, Россия
- Date of birth
- Registered
- Activity
Specialization
Бэкенд разработчик
Ведущий
Scala
Git
Docker
Redis
Высоконагруженные системы
Проектирование архитектуры приложений
PostgreSQL
Росатом это вообще много чего, АЭС с полным циклом от проектирования до демонтажа, наука, обучение, медицина, ледокольный флот. Еще вон плавучую АЭС скоро запустят. Ну и конечно политика и дипломатия. Подсадив на свои технологии это гарантированная прибыль на десятки лет. Хотя зарубежные компании и пытаются подвинуть, но получается с переменным успехом.
Были вопросы по активации W10 после чистой установки, при условии что это была версия обновленная аж с 8ки. На все вопросы ответили, продиктовали номер тикета, на случай если что пойдет не так и можно было сослаться на этот разговор. Второй случай был когда надо было перенести подписку в Azure, попался тогда индус, с соответствующим английским, по началу не понимал, так он подключал в разговор переводчика, который переводил в обе стороны. Были и проблемы, когда пробирался через их меню, обычно проще заказать звонок.
Так и вижу как тяжелый грейдер счищает снег с панелей, а после проходится щетками трактор.
Злостность манкипатчинга сложный вопрос, ActiveSupport, сплошной манкипатчинг по сути своей. Но народ не сильно жалуется, жалуется когда например какой-нибудь gem начинает неистово потихому расширять ActiveRecord, потом ищи концы из-за чего пошло не так.
Манкипатчинг пытались отрегулировать, добавили допонительную функциональность под это (не помню как называется), но так никто почти и не пользовался ей, поговаривают что поитогу выпилят обратно, вместе с continuation.
PS хотя в продакшене видел расширение NilClass, добавление к нему операций индексирования и еще пары часто употребимых. Видать надоело городить проверки, try является частью Rails, но в последних версиях добавили эквивалентную замену в std.
Веду лабы по программированию уже лет 5, в качестве языка С. Такой же опыт. В 80% перехожить собственно к написанию программы рано, т.к. не могут решить задачу в голове и формализовать ее.
Из последнего: самые первая лаба, нужно просто написать линейную программу, разлочить сумму на наминал + кол-во. Что может быть проще, но студент впадает в ступор. Спрашиваю его самого, сколько и чего надо, отвечает. На вопрос как он это посчитал, ступор.
В принципе стараюсь донести до них не знание конкретного языка, а в целом понимание того как составлять программу, т.к. язык как уже 100500 раз писали учится за пару месяцев. Читать его можно после беглого прочтения документации и усвоения базовых конструкций.
Неявные преобразования в строку запрещены. А это Ruby, где магии вагон и маленькая тележка.
Если и делать такую обертку, то над чистым Netty, чтобы задачу роутинга, формирования ответа и тд переложить на Rack и выше.
2) В JAVA нельзя расширять существующие классы, в Ruby можно конечно, да и интерфейс авторы сделали более менее привычный, совместим с тем, что есть в RxJava и других пободных бибилотеках и решениях. Многие как раз ругают Rails, за то что расширяет классы безспроса, что потом уже путают что есть в Ruby, что из Rails пришло.
3) Написать DSL поверх этого не проблема, но не вижу смысла, как говорится ИМХО. В данном случае, я за то чтобы делать минимум лишних действий между JAVA кодом и Ruby. А скорость адаптации все же не от DSL зависит, а от качества когда.
Это достаточно специфичное решение. Если нужно что-то каноническое, то это Puma, но на ней не сделаешь сотню паралелельных HTTP запросов, не заблокировав потоки. Можно конечно поколдовать над Ruby::Concurrency или Celluloid, но архитектура у Puma такая, что прям навязывают линейное выполнение кода. Не зря же делают альтернативные решения для выноса ActionCable из основного приложения (anycable).
В проде оно очень даже хорошо себя показывает, высокий concurrency, низкие задержки, узкие места перенесены на JAVA. В итоге время ответа (сложная логика) составляет 2-3мс. И весь I/O полностью асинхронный.
В конечном итоге я не предлагаю коробочное решения, а лишь показываю что если не устраивает то что есть в Ruby экосистеме, но есть на JVM, можно использовать это достаточно легко и просто. Да это будет не ruby way, да это будет идти местами в разрез с идеологией, но все это лишь инструмент и рекомендации, а не догма.
1) Зачем мне Rack если я не использую rack совместимый сервер + для реаьлной задачи где он используется это лишняя прослойка. UrlExpander это просто пример чуть сложнее HelloWorld, чтобы добавить использование Promise из Ratpack.
2) async/await везде делается на уровне языка, так что этого нет ни в JAVA, ни в Ruby, то и в JRuby ему появится неоткуда. В данном случае, предлагается модель Promise на основе акторов от Netty (JAVA библиотека, не имеет отношения к Ruby), без GIL, как в MRI реализации.
3) Зачем DSL? Еще раз, статья о том как использовать высокопроизводительный сервер из мира JAVA с Ruby.
Подобное работает, в продакшене, быстрое, юзабельное и приносит реальные деньги.
И еще раз повторю, статья о том, как использовать хорошие, быстрые, производительные решения на JAVA и не отказываться от имеющейся кодовой базы полностью. Отсюда и выглядит это все немного не Ruby like, а как JAVA.