Кто я такой и что делаю на раёне
Alexey Nikitin @tank_bohr
senior software engineer at bookmate (aka старший заднеконцевик)
Что такое JRuby
-
ЯП Ruby
-
написан на java
-
много библиотек, хороших и разных
Почему JRuby
-
мы пишем на ruby
-
мы не пишем на java
-
но иногда нужна java
-
никто в команде не умеет clojure/scala/groovy/kotlin - нужное подчекрнуть
-
маппинг из ООП-джавы в ООП-руби один в один, (java-библиотеки использовать удобнее, чем в clojure, но не так удобно как в scala)
Используем джаву из руби
require 'java'
java_import java.util.HashMap
java_import java.util.Map
require_relative './essosdk.jar'
java_import com.ufinity.daytona.client.sdk.SDKConst
java_import com.ufinity.sso.api.client.SSOCallClientConfig
java_import com.ufinity.sso.api.client.SSOCallClient
java_import com.ufinity.sso.api.common.LogUtil
java_import com.ufinity.sso.api.common.SSOCall
java_import com.ufinity.sso.api.common.SSOCallResult
client = SSOCallClient.new()
call = SSOCall.new()
call.set_function('func') # alias for `setFunction`
call.acive? # alias for `isActive`
Интеграция со Starhub'ом
-
есть только jar-ка
-
последние стабильные rails без проблем завелись на jruby
-
warbler gem
Нахождение похожих книг
-
Collaborative filtering (CF)
-
500к книг, 2кк пользователей
-
ruby реализация делала предрасчет ~1.5 года
-
lenskit recommender framework
-
lenskit работает 40 минут (10 из которых запрос в базу)
-
jbundler gem
SMPP-клиент
|
ruby-smpp
|
cloudhopper-smpp
|
|
- плохо поддерживается
|
+ активно поддерживается
|
|
- неплоностью реализует протокол
|
+ полностью реализует протокол
|
|
- плохо написана
|
+ хорошо покрыта тестами
|
|
- не поддерживает русскую кодировку
|
+ поддерживает все кодировки
|
|
+ поверх EventMachine
|
+ поверх netty
|
|
- не работает на последних версиях ruby
|
+ используется Twitter'ом
|
|
+ написана на ruby
|
- плохо документирована
|
Недостатки
-
Мало кто использует (не найдете ответов на stackoverflow, а если найдете, то они будут пятилетней давности)
-
Почти нет комьюнити
-
До сих пор нет rack-совместимого веб-сервера поверх netty
-
Немного отстает от MRI; версия 1.7 это ruby-1.9.3 (9.0.0.0.pre1 - 2.2)
-
Дуализм в библиотеках (что-то в гемах, что-то в java-пакетах); приходится держать и Gemfile, и Jarfile. Это становится проблемой когда хочется сделать gem с java-зависимостями
Java - зависимости
Куда девать зависимости?
-
Простой путь. Положить jar'ку в репозиторий
-
Путь rjack. Хитроумная смесь rake-задач и maven-плагинов
-
Путь clojure. Полная мимикрия под maven-пакет
/