← All posts tagged Scala

neFormal
coding Scala Дилемма. Хочется сделать всё на trait-ах вместо агрегации, и в то же время хочется везде именования функций какими-то общими словами типа getObject. Нда.
neFormal
coding Scala Странное дело. Первая строчка работает верно, а вторая порождает type mismatch (found: Unit, required: Option[AnyRef]), тычет на начало блока {}:
javaCollection.toArray.map{foo}
javaCollection.toArray.foreach{foo}

Казалось бы в чём разница?.
neFormal
coding IDEA Scala Простой код с анпаком из списка вводит идейку в ступор. Начинает тормозить на каждом действии с кодом. Секунд по 5. Надо уже в емакс погружаться (мотивация-мотивация).
На всякий случай хочется поинтересоваться, это вообще вменяемая конструкция?
val List(a,b,c) = "a$s$df".split("\\$").toList
neFormal
coding Scala ЧСВ RL event Сходил на сходку скалоюзеров. Впечатления? Нууу, хотелось бы большего..
Было аж 4 доклада: два по проектам конторы-организатора, один от jet brains про скала-плугин и один про squeryl.
Интересны имхо были только последние два. Рассказали, что idea стала лучше поддерживать скалку, что есть прикольные автодополнялки, рефакторилки, и конвертеры из кода с сахаром в код без оного. Про squeryl был просто обзор с примерами кода. Узнал пару хороших вещей, которые ещё не юзал, т.к. ещё плохо читал документацию. Жаль, что докладчик не юзал ничего другого, не мог сравнить.
А первые два доклады были ни о чём. Как-то в стиле "- Мы сделали так. — А почему? — Ну, так сложилось исторически". Показалось, что авторы недавно писали на раби с РоР, поэтому мыслили ещё теми шаблонами.
Также опрос показал, что из человек 20-30 в работе скалку используют меньше половины.
neFormal
coding Scala squeryl Ах да, самая замечательная ошибка. Описание повергает в глубокие раздумья.
Причина:
val user = transaction { from(users)(u => where(u.login === login) select(u) ).single } // убрать transaction{}
Результат:
java.lang.RuntimeException: no session is bound to current thread, a session must be created via Session.create
and bound to the thread via 'work' or 'bindToCurrentThread'
...

Конечно, бывает всякое, но таких нежданчиков в либах я ещё не встречал.
neFormal
coding Scala squeryl Я уже начинаю сам себе казаться придирчивой истеричкой. Ну некрасиво же:
val user = transaction { from(users)(u => where(u.login === login) select(u) ).single }
Столько сложностей из ничего.
Похоже, надо подключать редиску и уже её настраивать на сохранение в БД надолго. =\
neFormal
coding Scala С этими питонами и рубями совсем отвыкаю от статики, от того, что никто не напечатает мне причину ошибки.
Потыкал немножко Squeryl. Это такой ORM для скалки. Довольно простой, чтобы быстро накропать на нём несложное приложение. Больше провозился тупя над ошибкой в версии драйвера к H2 и сборкой всего нужного мне барахла с sbt-0.10.1. Да, ещё не допёр сразу до использования KeyedEntity, плюс там оно требует val id:<Type>. Без этого не заработает autoIncremented. А так всё просто:

package auth
import org.squeryl.PrimitiveTypeMode._
import org.squeryl.{KeyedEntity, Schema}

class User(val login: String, val password: String) extends KeyedEntity[Long] {
// def this() = this("", "")
val id:Long = 0
}

object Auth extends Schema {
val users = table[User]("users")
on(users)(it => declare(
it.id is(primaryKey, autoIncremented),
it.login is(unique, indexed, dbType("char(96)")),
it.password is(dbType("char(128)"))
))
}
//
Удобно, что схема лежит отдельно, и что в объекте схемы может быть объявлено несколько таблиц(тут сделать аналогично val users/on(users)).
neFormal
coding Scala circumflex Желающие заюзать circumflex-orm должны поиметь в виду, что хоть оно и лежит на сайте одним jar-ником, намекая на тривиальное использование, но в то же время зависит, как минимум, от:
1. circumflex-core (да, ведь cx — это "больше, чем orm"©)
2. ehcache (традиционный java кэш.. порадовало, хотел именно его поюзать)
3. c3p0 (для генерёжки схем базы.. я юзаю с h2, пока проблем не успел поймать)

Впрочем, если юзаете maven, то авторы для него кое-чего прикрутили. Я то пока тыкаю палочкой, чтобы разобраться. В случае чего, конечно, лучше заглянуть в pom.xml
neFormal
coding fail Scala circumflex Нда, как-то нелепо это всё. Пример окукливания разработчиков: groups.google.com
Пришёл человек, объяснил в чём проблема circumflex-а. Ему ответили, что всем пофиг на его проблемы, главное, что разрабам нравится. А то, что оно неюзабельно для всех остальных — это пофиг.
Может прожект и не проэтосамят, но аудиторию они уже теряют. А потом ещё будут жаловаться, что их никто не понимает, не помогает, не любит, что все идиоты и не понимают их замыслов. Ясен пень, если оно даже не собирается, поймёшь тут.
neFormal
ToDo coding Scala Автор(-ы) circumflex-а несколько упоролся(-ись), распространяя одинокий jar-ник с orm-ом, который завязан на другой jar-ник. Надо бы багрепорт написать.
neFormal
Scala вброс Python Кто бы что ни говорил, а питоновское "value if condition else value2" намного читабельнее нежели вариант "if (condition) value else value2", который есть, например, в скалке. Особенно это актуально в однострочниках.
neFormal
Scala job Почитал вакансию по скалке, список скиллов:
Scala collections, Pattern matching, Scala type parameters, Case classes, Nested functions, Polymorphic Methods, Currying, Higher-Order Functions, Traits, Unified Types, Local Type Inference, Call-by-name evaluation.

Я вот не понимаю, почему там список синтаксических конструкций?. Как можно вообще заявлять о знании языка, если таких достаточно базовых вещей не знаешь?. Ладно там карринг, но трейты! Странно, в общем, "знание цикла for от 3х лет".
neFormal
coding Scala Наткнулся на странный косяк. Если юзать java-код, который зависит от jar-ника, а в коде используются обращения вида org.site.project.ClassName.InnerClassName, то скалка не видит этого InnerClassName. Да и вообще много чего не видит.
Пока обрулил это копипастой сорсов jar-ника в сорсы проекта. Некрасиво, но зато работает. Как бы это красиво исправить?.
neFormal
coding Scala IDE Что-то не любят скалу в ИДЕ-шках. В эклипсе всё еле-еле заработало, но нет даже подсветки синтаксиса(хотя было заявлено). В нетбинсах вроде бы всё хорошо, но сборщик кормит scalac непонятными ему флагами(гуглить было уже совсем влом.. надеюсь, это настраиваемо). И только идея с нуля делает всё и понятно.
И вот эту багу я не осилил: code.google.com . Взял более свежую скалку.