
Alexander
19.12.2016
14:54:20
Гайс, есть для Скаламока какие-нибудь линзы, чтобы вложенные моки создавать без боли? Да и не обязательно Скаламок, вообще что-нибудь подобное бы найти.

Kirill
19.12.2016
14:58:56
trait MyMap[K, V]
trait MyTrait[K, V, MapType <: MyMap[K, V]]{
type Impl <: MapType
}
trait MyMap1 extends MyMap[Int, String]
class A extends MyTrait[Int, String, MyMap1]{
class Impl extends MyMap1
}
да, такое я соорудил, но я совсем оборзел и хотел последнее записать без Int, String ?

Oleg
19.12.2016
15:00:14
trait MyMap{
type Key
type Value
}
trait MyTrait[MapType <: MyMap]{
type Impl <: MapType
}
trait MyMap1 extends MyMap{
type Key = Int
type Value = String
}
class A extends MyTrait[MyMap1]{
class Impl extends MyMap1{
override type Key = Int
override type Value = String
}
}

Google

Oleg
19.12.2016
15:04:56
Отличается приблизительно ничем

Mikhail
19.12.2016
15:06:26
кто-нибудь может пояснить какие преимущества у этого лапшестроительства перед trait MyMap1 extends MyMap[String,Int] ?

Oleg
19.12.2016
15:12:23

Mikhail
19.12.2016
15:13:04
не заметил в его словах такого. но видел, что ему хочется использовать альяс для пары типов

Oleg
19.12.2016
15:16:12
он хочет передать свой MyMap1 внутрь какого-то MyTrait а
всё это, конечно, непонятно без нормального примера

Mikhail
19.12.2016
15:17:16
помимо кода я смотрю, что он словами написал)
поэтому да, подождем полного куска кода) а то может там действительно причины какие-то есть для лапшишки)

Anatoliy
19.12.2016
17:16:58
Народ, посоветуйте пожалуйста что можно почитать по событиям и как создавать их и слушателей для них?

Nick
19.12.2016
17:19:22
@fomkin напомни ресурс с курсом по скале, который ты скидывал

Kirill
19.12.2016
17:22:22
добрался до дома, хотел сделал вот так https://scalafiddle.io/sf/Zt9bA5u/0 с подсказками зала, спасибо!
В этой штуке если поменять
class ConcreteMap extends Map[String, Int]
на предположим
class ConcreteMap extends Map[Int, String]
, то ошибка компиляции, это мне и было нужно

Google

Anatoliy
19.12.2016
17:24:13
По событиям пока нашел такое: http://stackoverflow.com/questions/16267616/akka-event-bus-tutorial
Но это акка и соответственно акторы, а мне надо связать события вне акторов со слушателями в них же. Да еще и объявлять их не в preStart, а при опять же определенных условиях. И если условия исчезают - отключать.

Kirill
19.12.2016
17:27:43
эм... а зачем оно вам вообще оказалось надо если не секрет?
Нужно для того, чтобы когда сигнатуру ConcreteMap кто-то поменяет потом, у них ошибка при компиляции была. В логике создаются параметризованные инстансы внешнего ресурса, то есть если бы я не поставил там F <: Map, то сигнатуру ConcreteMap поменяли бы, про мой код забыли, оно бы скомпилировалось, и в рантайме упало, потому что внешний ресурс уже работает с другой схемой данных
Надеюсь, понятно объяснил

Anatoliy
19.12.2016
17:28:32
Надеюсь, понятно объяснил
Да, понятно, спасибо. Я с этим не сталкивался т.к. пока не писал код который бы использовали как черный ящик, но теперь буду иметь в виду

Wystan
19.12.2016
18:10:32
спасибо тем, кто aj.ru порекомендовал. довольно оперативно отвечали на вопросы и на следующий день привезли мне новенький макбук с 15, который в принципе тяжело где-то найти даже у реселлеров (у реселлеров еще на 20 тыщ дороже он)
причем у меня был нерусский номер в роуминге и курьер связался по телеграму со мной. прогрессивно.

?Ivan
19.12.2016
18:13:02

Aleksei
19.12.2016
18:15:14


Kirill
19.12.2016
18:19:17
Парни, у меня новая беда. https://scalafiddle.io/sf/Zt9bA5u/2 это не компилируется, хотя идея ничего не подсвечивает
В начале убрать пакет и объект само собой
исправленное https://scalafiddle.io/sf/Zt9bA5u/3
Зачем так делается - CollectionContainer это обертка, которая отправляется на кластер и выполняется на нём. Внутри я буду инжектить непосредственно саму проперти collection, не суть. Хотел я на самом деле разделить на части вот этот контейнер и поведение, т.е. что мне нужно будет сделать с коллекцией, то есть чтобы на любой тип коллекции, мне достаточно было сделать свой класс, который описывает, как эту коллекцию обрабатывать, дальше запихивать это всё в CollectionContainer, отсылать, и это там бы выполнялось

Anatoliy
19.12.2016
18:26:11
Я конечно мало чего там понимаю, но не может быть там дело в (b: F) ?

Kirill
19.12.2016
18:26:13
И чтобы при этом выполнялась изначальная цель - при смене сигнатуры конкретной коллекции всё падало на компиляции и говорило "а меня ты забыл поменять"

Anatoliy
19.12.2016
18:27:20
А ну да, это к контейнеру относится

Kirill
19.12.2016
18:29:52
Я вот и не могу понять, что он вывести не может

Anatoliy
19.12.2016
18:31:04
Мысли дилетанта интересны?

Kirill
19.12.2016
18:31:25
конечно

Google

Anatoliy
19.12.2016
18:33:47
class Collection1Behaviour extends Behaviour[String, Int, Collection1, Either[Throwable, Int]] {
и
class CollectionContainer[K, V, R, F <: Behaviour[K, V, Collection[K, V], R]](b: F) {
Мы скармливаем внутрь Colection1, т.е. Collection1 - это F.
Значит смотрим из чего оно состоит.
K - String,
V - Int,
R - Collection1 - Collection[String, Int]
F - Collection1Behavior в общем я бы сказал что тут что-то пропущено или поменяно местами....
Behaviour[K, V, F <: Collection[K, V], R] { - опять же K, V, F, где уже F - Collection1
Где-то тут косяк мне кажется по типам если смотреть


Wystan
19.12.2016
18:36:49
ты же записал мой ник? а? выходит что нет?
персональное спасибо Алексею Терехину! (ты кстати не тот терехин, который на физтехо-борде постоянно пасты про то как он в очередной раз написал заяву и отправил ее по инстанциям в ебурге?)
какой в итоге взял?
взял 15 последний макбук про, там надо переучиваться по ходу, нет функциональных клавиш, приходится для шорткатов идеевских зажимать три кнопки теперь

Grigory
19.12.2016
18:38:50

Wystan
19.12.2016
18:46:42
ща разберусь как емаксовские шорткаты в zsh впилить и все будет норм

Marat
19.12.2016
18:47:31

Kirill
19.12.2016
18:47:52
class Collection1Behaviour extends Behaviour[String, Int, Collection1, Either[Throwable, Int]] {
и
class CollectionContainer[K, V, R, F <: Behaviour[K, V, Collection[K, V], R]](b: F) {
Мы скармливаем внутрь Colection1, т.е. Collection1 - это F.
Значит смотрим из чего оно состоит.
K - String,
V - Int,
R - Collection1 - Collection[String, Int]
F - Collection1Behavior в общем я бы сказал что тут что-то пропущено или поменяно местами....
не, погоди, в Collection1Behaviour в качестве R скармливаем Either, в качестве F - Collection1.

KrivdaTheTriewe
19.12.2016
18:48:35
А в чем преимущества эмакса в таком языке как скала перед идеей

Nikolay
19.12.2016
18:49:32
ensime там
кому-то он нравится

Wystan
19.12.2016
18:50:24
Ну я емаксовские шортакты просто использую для навигации, и сам емакс как текстовый редактор(org-mode, dired, magit)

Nikolay
19.12.2016
18:50:45
я не смог emacs+ensime пользоваться как основной средой, потому что к idea слишком привык

Mikhail
19.12.2016
18:52:12
и вот этого Behaviour[K, V, Collection[K, V]

Kirill
19.12.2016
18:54:46

Mikhail
19.12.2016
18:55:58
там компилятор считает, что class CollectionContainer[K, V, R, F <: Behaviour[K, V, Collection[K, V], R]] - K, V для коллекции Collection должны выводиться исходя из CollectionContainer, однако у тебя они выводятся исходя из Collection1 ( из другого места для компилятора)
если Collection1 баунды дальше прокинуть так, чтобы они выше определялись тогда будет компилиться. но ты хочешь этот альяс, поэтому надо подумать сейчас
я поэтому не люблю такие сложные баунды городить, потому что в какой-то момент начинается ад с прокидыванием

Google

Mikhail
19.12.2016
19:21:12
вот так оно компилится. но если честно я не советую так делать, потому что в дальнейшем всплывут различные минусы. когда я дохожу до такого, я понимаю что однозначно пора упрощать, какая бы стройная мысль ни была в голове

Kirill
19.12.2016
19:22:37

Mikhail
19.12.2016
19:22:49
возможно в дотти это пофиксят, но пока приходится компилятору буквально на пальцах обьяснять что он слегка неправ)

Kirill
19.12.2016
19:24:55

Mikhail
19.12.2016
19:25:42
не совсем, вот еще смотри - уже с альясом

Admin
ERROR: S client not available

Kirill
19.12.2016
19:25:42

Mikhail
19.12.2016
19:26:13
https://scalafiddle.io/sf/rAzAyMS/0
видишь с альясом работает)
вся суть в том, что компилятору на пальцах показывается за счет S = String что используется один и тот же класс. Но даже после этого приходится в конце еще немного помочь

Kirill
19.12.2016
19:30:17
видишь с альясом работает)
Ага, и придётся для всех типов, которые используются в Collection делать альясы для K, V, R, и поведения :) не, ну нафиг, видимо мысль действительно была не такая светлая, пересмотрел видео с фримонадами) спасибо за помощь)

Nick
20.12.2016
07:08:00
https://github.com/heathermiller/dist-prog-book?files=1
Кто нибудь уже прочитал?

Aleksei
20.12.2016
07:09:13
слишком заняты фримонадами все

Denis
20.12.2016
07:10:38
Но можно дистрибьютить интерпретаторы )

Aleksei
20.12.2016
07:10:57
слишком рано пока что
ок
тогда просто lazy
я просто хз как это все совмещать, на работе нет фп, хочется фримонад потрогать, читаешь, слушаешь, смотришь, пробуешь, открываешь рабочий проект и хочется уволиться, так что фп опасно для работы =)

Google

Denis
20.12.2016
07:13:25
Ну или такая работа опасна для твоего развития )

Nick
20.12.2016
07:14:32
Иди в хаскель уже)

Aleksei
20.12.2016
07:14:46
боже упаси
аж верующим стал на секундочку

Nick
20.12.2016
07:15:06
Че так)

Aleksei
20.12.2016
07:15:19
есть два типа работ, опасна для развитися и второй тип работы опасна для ипотеки =)

Nick
20.12.2016
07:15:32
Фомкин ж сказал, что скала дорога к хаскелю

Denis
20.12.2016
07:15:52
не правда же

Nick
20.12.2016
07:15:53
?

Denis
20.12.2016
07:16:09
я про два типа работ 0

Nick
20.12.2016
07:16:53
@fundamentalparticle а ты уже пишешь на скале? ?

Aleksei
20.12.2016
07:17:31

Denis
20.12.2016
07:17:43
это другой разговор )

Aleksei
20.12.2016
07:18:00

Nick
20.12.2016
07:18:24
@fomkin хватит спать уже, скинь ссылку на туториал по скале.
Протестую
Надо сразу быдлокодить

Aleksei
20.12.2016
07:19:45
вот вся токсичность скала в этом, чуть прочитал что-то и снова искать работу