Scala-сообщество Вертикалей
352 subscribers
46 photos
1 video
29 links
Профессиональное сообщество разработчиков на Scala от команды Яндекс Вертикалей (auto.ru, Яндекс Недвижимость, Яндекс Аренда, Яндекс Путешествия).

Делимся с вами своими наблюдениями, экспертной оценкой, авторскими статьями и полезным контентом.
Download Telegram
Начинаем делиться с вами записям F[Scala] 2024

Первый спикер — Денис Шевченко из BIOCAD 🔴 Изоморфизм Карри-Говарда и Вселенная

Денис рассуждал в своем докладе на тему того, какую роль играет математики в нашей профессии.

Кем был автор лямбда-исчисления и почему математики отстают от философов? Где прячется алгебра в алгебраических типах данных и почему Scala-руководство не говорит всей правды? Как с помощью функции доказать теорему и зачем нужен пустой тип?

Обо всём этом в докладе Дениса. Смотреть:

📱 на Youtube
📱 в ВК Видео

Если у вас будут вопросы к спикеру, пишите их в комментариях. Мы попросим Дениса прийти и ответить здесь же.

Спасибо всем, кто был с нами на конференции офлайн или онлайн. Увидимся в следующем году

@scala_verticals
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥178👍5👌1
Как превратить сложные процессы в понятные и надежные решения?

В докладе Ахтяма Сакаева вы узнаете, как с помощью стримов на Scala моделировать процессы, управлять временем и состоянием, создавая код, который легко поддерживать.

Этот доклад для тех, кто хочет по-новому взглянуть на разработку и раскрыть мощь стримов для решения реальных задач. Готовы увидеть, как код превращается в произведение искусства?

Запись выступления:

📱 на Youtube
📱 в ВК Видео

Все записи можно найти в плейлисте F[Scala] 2024 в ВК Видео и на Youtube.

Делитесь с коллегами и друзьями записью и задавайте вопросы в комментариях.

Как вам выступление?


@scala_verticals
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍63😁1👌1
Boxing в Scala: когда это плохо и как бороться?

Read-only база данных — одна из важных частей поиска. На низком уровне мы работаем с множеством данных примитивных типов. В Scala часто происходит автоматическое преобразование, которое несет ненужную нам аллокацию типов-оберток.

Дмитрий Каряев, Техлид поисковой платформы Яндекс Вертикалей, поделился с участниками F[Scala] 2024:

🔵какими методами находить ненужные автопреобразования и аллокации
🔵как писать код без них

Смотреть запись выступления

📱 на Youtube
📱 в ВК Видео

Все записи можно найти в плейлисте F[Scala] 2024 в ВК Видео и на Youtube.

Вопросы Дмитрию можно написать в комментариях. Как вам доклад? ❤️🔥

@scala_verticals
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥93
Подношение от типов: отношение подтипов

Великие типы поднесли нам язык программирования, в котором каких только типов нет. В Scala есть и типы высших порядков, и типы, зависимые от путей, и много других.

При этом это всё ещё объектно ориентированный язык, а значит, без отношения подтипирования — никак: наследоваться-то надо.

Алексей Троицкий из Т-Банка F[Scala] 2024 рассказал, как удивительным образом хорошо это отношение работает со всеми видами типов языка и как это используется на практике в скаловых опенсорс-библиотеках.

Смотрим:

📱 на Youtube
📱 в ВК Видео

Все записи можно найти в плейлисте F[Scala] 2024 в ВК Видео и на Youtube.

Если у вас будут вопросы к спикеру, пишите их в комментариях 🔥 Мы попросим Лешу прийти и ответить здесь же.

@scala_verticals
Please open Telegram to view this post
VIEW IN TELEGRAM
12👍9🔥8
Влияет ли первоначальный дизайн на дальнейшую судьбу языка программирования?

Об этом нам рассказал Роман Смирнов из Ecom Tech на F[Scala] 2024. В его докладе подробности, о том:

🔵Что собой представляет настоящая акторная модель на примере Elixir (BEAM)?

🔵Почему эту модель невозможно реализовать поверх JVM?

Смотрим:

📱 на Youtube
📱 в ВК Видео

Все записи можно найти в плейлисте F[Scala] 2024 в ВК Видео и на Youtube.

Вопросы по традиции пишите в комментариях✏️

@scala_verticals #fscala2024
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥43
Как добавить новую функциональность в Apache Spark, не форкая его

Когда YTsaurus опубликовали в опенсорс, появились новые требования к SPYT — проекту, который помогает интегрировать платформу с Apache Spark.

Одно из требований — отказ от форкнутой версии Spark. Но как быть, если наши модификации уже просочились в самую глубь и мы не хотим от них отказываться?

Александр Токарев из Яндекс Инфраструктуры на F[Scala] 2024 поделился, как команда разработала способ для патчинга Apache Spark в рантайме.

Смотреть:

📱 на Youtube
📱 в ВК Видео

Все записи можно найти в плейлисте F[Scala] 2024 в ВК Видео и на Youtube.

@scala_verticals
Please open Telegram to view this post
VIEW IN TELEGRAM
👍104👌3🤡2👎1💩1
Поставка http-интеграций через библиотеки

Если вы работали в компании с несколькими продуктами, то знаете, как порой сложно интегрировать сторонние сервисы.

В такие моменты думаешь: «Вот бы просто подключить библиотеку, где бы уже реализовали эту интеграцию, да ещё и с политиками ретраев, логирования, тайм-аутов и прочего».

В Т-Банке реализовали подход, чтобы просто подключать библиотеку и вызывать метод. А нам об этом рассказал Иван Лягаев на F[Scala] 2024.

Посмотреть можно:

📱 на Youtube
📱 в ВК Видео

Все записи можно найти в плейлисте F[Scala] 2024 в ВК Видео и на Youtube.

А у вас были подобные кейсы? Пишите в комментариях. Там же можно задать вопросы спикеру, а мы попросим его ответить 🤝

@scala_verticals
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥4❤‍🔥3
Обновление scalamock с 5.2.0 до 6.0.0

Привет! Это Женя Веретенников, я отвечаю за devtools для скалистов. Мы недавно обновили scalamock в нашем монорепозитории и сделали шажок к Scala 3 :)

Для тех, кто ещё не обновлялся — рассказываем про важный нюанс обновления.

В новой версии инстанс MockFactory обязан быть инстансом TestSuite. То есть нужно подмешивать MockFactory в класс теста, а не куда-либо ещё.

Например, такая конструкция больше не компилируется:


trait Mocking extends MockFactory {
val myMock = mock[MyService]
}

class MyServiceSpec extends AnyWordSpec {
"MyService" should {
"do something" in new Mocking { /* ... */ }
}
}


Эту конструкцию использовали, чтобы создавать отдельные моки под каждый тест.

Изменение API сделано не просто так. Чтобы scalamock проверял в конце теста, вызваны ли моки, как ожидалось, нужно подмешивать MockFactory именно в класс теста. Например, этот тест не падает, несмотря на очевидное отсутствие вызова f(42):


class NoMockFactorySpec extends AnyWordSpecLike {

trait Service {
def f(x: Int): String
}

"blabla" should {
"blabla" in new MockFactory {
val service = mock[Service]
(service.f _).expects(42).returning("42")
}
}
}


На версии scalamock 6.0.0 этот код не компилируется.

Корректно создать по моку на каждый тест можно с помощью OneInstancePerTest. Избавляться от fixture-трейтов типа Mocking, как в первом примере, необязательно. Достаточно завернуть его внутрь класса с тестом:



class MyServiceSpec extends AnyWordSpec with MockFactory with OneInstancePerTest {

trait Mocking {
val myMock = mock[MyService]
}

"MyService" should {
"do something" in new Mocking { /* ... */ }
}
}


В процессе обновления библиотеки мы заметили, что несколько тестов из-за этой проблемы уже давно были зелёными, но по факту сломанными, так как неверно проверяли моки. Часть тестов удалось пофиксить, на часть пришлось навесить @Ignore

Возможно, такие сломанные тесты найдутся при обновлении и у вас.

@scala_verticals
👍184🔥4👌1
Всем привет! Это Женя Веретенников (@evis_dev). Я отвечаю за devtools для скалистов Вертикалей, а еще веду этот канал.

Здесь я делюсь кейсами команд Scala-разработчиков Вертикалей: рассказываю о сложностях, с которыми мы столкнулись, и решениях. Кстати, подробнее о наших командах и задачах можно узнать на сайте.

Еще в этом канале публикуются анонсы профильных мероприятий. Например, F[Scala] — крупнейшей конференции по Scala и функциональному программированию от Яндекс Вертикалей.

Что ж, настало время поделиться недавним решением одной проблемы :)
4🤝4
Scala-сообщество Вертикалей pinned «Всем привет! Это Женя Веретенников (@evis_dev). Я отвечаю за devtools для скалистов Вертикалей, а еще веду этот канал. Здесь я делюсь кейсами команд Scala-разработчиков Вертикалей: рассказываю о сложностях, с которыми мы столкнулись, и решениях. Кстати, подробнее…»
Мы сейчас переводим нашу поисковую платформу из sbt в bazel. В процессе натолкнулись, что такой код перестаёт компилироваться в bazel:


case class ValueIdx(idx: Int) extends AnyVal

object ValueIdx {
implicit def asInt(v: ValueIdx): Int = v.idx
}

val oops = ValueIdx(1) + 2


Ошибка в bazel-проекте:


type mismatch;
found : Int(2)
required: String
val oops = ValueIdx(1) + 2
^


При этом, в sbt-проекте код компилируется.

Понятно, что в sbt-проекте компилятор подставляет asInt:


asInt(ValueIdx(1)) + 2 // 3


А в bazel-проекте, напротив, используется any2stringadd, и компиляция падает:


// String + Int => ошибка
any2stringadd(ValueIdx(1)) + 2


Очевидный фикс — убрать импорт any2stringadd явно:


import scala.Predef.{any2stringadd as _, _}


Но добавлять это не хочется, выглядит костыльно. И непонятно, что это вообще за ерунда, почему по-разному компилится.

Помогли разобраться release notes версии 2.13.13 компилятора:

When upgrading to 2.13.13, existing users of -Xsource:3 should explicitly consider switching to -Xsource:3-cross. Some behaviors of -Xsource:3 have changed; see new doc page for details


По доке становится понятно, что теперь any2stringadd не резолвится, только если включена опция -Xsource:3-cross. Её нам включать было сложновато — сломалась компиляция многих классов, и quickfix под это отсутствует.

Минимальный reproduce лежит в этом gist. Убедиться в изменении поведения можно, как на скриншоте в комментарии к посту.

В итоге мы включили только опцию -Xsource-features:any2stringadd из доки, что потребовало поправить всего 40 строк кода в монорепе на 4 миллиона строк.

Теперь и вы знаете, как решить эту и подобные проблемы при обновлении Scala на 2.13.13+ в проекте, если у вас включен -Xsource:3 😉
👍176👏6🤔1
⚡️Встречаемся в Казани и зовём вас в гости

Мы организуем митап по Scala в Казани, где выступят классные спикеры с тремя докладами:

📍Павел Аргентов | Что мы рассказываем про FP программистам на других языках
📍Алексей Литковец и Всеволод Никитин | ZIO Query и современное общество
📍Кирилл Ершов | Перевод гейтвея Auto.ru на GraphQL

Ну и, конечно, не обойдёмся без афтепати 😉

📌Собираемся 27 марта в офисе Яндекса, в БЦ «Сувар Плаза».

Посмотреть программу и зарегистрироваться можно здесь.

А для тех, кто не сможет прийти, мы опубликуем видеозапись с митапа в наших соцсетях.

До встречи на Scala Meetup 🔥
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥96👏1
📸 Scala-митап в нашем мини-фотоотчёте

Вчера в Казани мы провели Scala-митап — было интересно, уютно и весело! Спасибо всем, кто пришёл, задавал вопросы и делился опытом 💛

Для тех, кто не смог присоединиться, мы скоро выложим записи докладов. Stay tuned 👀

А пока мы ждём профессиональные снимки, делимся нашим мини-фотоотчётом со вчерашнего вечера.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥176👍6❤‍🔥1😍1