Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PNWScala News

PNWScala News

Informal tale on the most hipsterish Scala-conference

Vladimir Uspensky

January 31, 2015
Tweet

More Decks by Vladimir Uspensky

Other Decks in Programming

Transcript

  1. Jon Pretty: the Art of One-liner Разные urlы: http, file,

    classpath, s3 json.fieldName, json.arrayField(index).as[String] json.as[CustomObject] //через соответствия имён //или кастомные экстракторы json.myFavoriteCars // Использует `Dynamic`
  2. Jon Pretty: the Art of One-liner Режимы: import modes.returnTry //

    методы начинают возвращать `Try` Pattern matching для JSON: case json"""{ "field": $x }""" => c
  3. Brendan McAdams: on Gateway drugs будет на следующих Scala Days

    v> для fallbacks в “disjunctions” (\/) Validation это Аппликативный функтор (|@|): (a |@| b) { case (a, b) => }.disjunction Возвращайте `Validation` из своих API`s
  4. Stephen Compall: Types out of patmat • Phantom типы ◦

    allStrings это Elephants ◦ empty Set of Elephants from injectivity
  5. Mark Millstone: Don’t cross the streams Поиск количеств элементов потока

    Конвееры хранят только ограниченное количество данных, а поток бесконечный Случайные выборки (reservoir sampling) сохранять с вероятностью = (размер резервуара) / M
  6. Mark Millstone: Don’t cross the streams Выбрать элементы в потоке,

    встречающиеся чаще определённого порога выкидывать всех по одному и смотреть, что осталось “Saving space and summarising Streams” статья MMA’05
  7. Mark Millstone: Don’t cross the streams Выбрать элементы в потоке,

    встречающиеся чаще определённого порога Можно самые популярные элементы таскать по корзинам, пронумерованным, как top 10, сохраняя на каждой такой корзине частоту.
  8. Mark Millstone: Don’t cross the streams MurMurHash, быстрый и не

    криптографический Counting hashes hash1(x) + n*hash2(x), где n — целое HyperLogLog (stochastic smoothing)
  9. Evan Chan: Spark I lazy, streams, SparkSQL, flatMap .count или

    .collect запускает вычисления Машинное обучение (регрессии всякие...) ETL-приложение может быть распределённым Коннекторы для Elastic search, Cassandra DStream даёт распределённые вычисления
  10. Evan Chan: Spark I Не используйте очень активно `group` и

    `sort` Есть кэширование, но его нужно понимать Actions vs Transformations (отличаются ленью)
  11. Helena Edelson: Spark II • Kafka координирует сервисы (Kafka actor)

    • MLib для Машинного обучения • GraphX для графов • Драйвер для Cassandra
  12. Vlad Ureche: Miniboxing • Самая лучшая оптимизация — убрать boxing

    • Miniboxing это плагин для компилятора добавляющий аннотацию @miniboxed Class[@miniboxed T] даёт увеличение скорости ~25%-75% • Есть предупреждения компиллятора, показывающие, куда поставить @miniboxed
  13. Vlad Ureche: Miniboaxing Другие интересные проекты EPFL: Type debugger, Blitz,

    Lightweight modular staging для добавления оптимизаций компилятора из библиотек
  14. Leif Wickland: Towards a Safer Scala • “Linting” Scala •

    Запретить “better Java” • Automated code review, когда рядом нет крутых профессионалов • What is not automated — doesn’t exist!
  15. Leif Wickland: Towards a Safer Scala IDE based — можно

    закоммитить бяку Linter — старый, нет документации, забили Флаг компилятора — только когда меняется именно ЭТОТ файл -Xfatal -warnings -deprecation -Xlint В 2.11.4 можно настраивать разные политики для разных модулей
  16. Leif Wickland: Towards a Safer Scala Abide — Пока бета

    FindBugs — Слишком много false positives Scalastyle — xml-конфиг, supression коммитами, заставляет следовать хорошему стандарту кодирования WartRemover — typelevel, запрещает Option. get, sbt для настройки
  17. Avy Briant: Distributed Decision Trees • BrushFire — библиотека для

    деревьев • Scalding trait Tree[U, T] { def predict(features: Map[String, V]): T }
  18. Marconi Lanna: What is since “Programming in Scala” github/marconilanna/PNWScala2014 Try;

    Интерполяция строк Pimp my class (с typeclass’ами) Value classes; Fututes / Promises Actors перенесли в Akka Модульность компилятора Макросы, quasiquotes, scala.meta
  19. Marconi Lanna: What is since “Programming in Scala” Dynamic (надо

    реализовать что-то из `applyDynamic`, `applyDynamicNamed`, `selectDynamic`, `updateDynamic`) 2.11 — ускоренная компиляция, инкрементальная перекомпиляция в sbt 2.12 — java 8, spores, rx, новые коллекции
  20. Ryan Tanner: Year with Akka • (Chef, Vagrant) -> Docker

    • Akka не запрещает создавать монолиты • “Single Responsibility Principle” — это не только про кодинг • Сервисы общаются через Kafka
  21. Ryan Tanner: Year with Akka При запуске: Отдельные сервера стали

    недоступны Split brain Не стоит использовать Actors и Future { скачать много данных; зарядить с ними сложные вычисления; }
  22. Ryan Tanner: Year with Akka Предполагайте, что всё может отвалиться

    Push not Pull Старайтесь сохранить сервисы маленькими Отдельно думайте, как новые члены команды будут осваиваться!
  23. La Haoyi: Scala.js 4-5% JS это ‘good parts’ @JSExport Class(Object)

    с функцией main sbt автоматически пересобирает! `main` принимает: dom.HTMLCanvasElements Иногда нужно кастить возвращаемые значения к JS-типам
  24. La Haoyi: Scala.js чтобы было красивенько <script src=“bootstrap cdn”></script> в

    Scala доступны onKeyUp & other DOM APIs js-свойства в Scala автоматически обновляют свои значения
  25. La Haoyi: Scala.js Чтобы использовать библиотеки, их надо специально портировать

    jQuery, Angular и ещё несколько уже но никакого REST и parallel collections на клиентской стороне
  26. La Haoyi: Scala.js • Сервер на Spray + Клиент на

    Scala.js Папочка /client в исходниках • Статически типизированные REST APIs можно положить в папочку /shared • Юнит-тесты общие на сервере и клиенте! • Общий код и библиотеки
  27. Eric Osheim: Spire • Среди всех чисел, те которые можно

    представлять в программах исчезающе мало • С очень длинными и иррациональными числами нельзя работать совсем по-честному, поэтому нужно знать ограничения своего подхода (потому, что память ограничена) • Точность можно настраивать (lazy) • Сравнивать числа в общем виде не получается!
  28. Eric Osheim: Spire • SafeLong • Rational (25/100 = 1/4)

    • Complex • Float — хороший, насколько это возможно
  29. Gabriel Claramount: Category Theory Категория — это identity и композиция

    Initial (Nothing, не населён) и final (Unit, уникальный) объекты value1 —функции—> value2 type1 —extends—> type2
  30. Gabriel Claramount: Category Theory Дуальность (co-/ко-) Продукт и Копродукт Естественные

    преобразования (Natural transformations) ТК позволяет получать теоремы бесплатно
  31. Jean-Rémi Desjardins, Eddie Carlson: Better `Future` error handling • HLists

    и Applicative для fail-fast Futures (чтобы падали, когда хотя бы один из sequence отвалился) • Причём авторам хотелось, чтобы типы у последовательности Future не терялись • Помещайте самые важные type parameters в конец, а то будет боль